列出在Travis中的pull request中被修改的文件列表。

8
我希望在Travis上列出拉取请求中修改的所有文件。
我尝试过 `$(git diff --name-only $TRAVIS_PULL_REQUEST_BRANCH $(git merge-base $TRAVIS_PULL_REQUEST_BRANCH master))`,但是 Git 不知道 TRAVIS_PULL_REQUEST_BRANCH,因为它在一个分叉版本库上。
我也尝试了`git rev-list`和 `$TRAVIS_COMMIT_RANGE`,但它还包括主分支上的新提交。
有什么办法可以获取拉取请求所独有的修改文件?
2个回答

12
你已经接近成功了。
在这种情况下,没有理由使用环境变量$TRAVIS_PULL_REQUEST_BRANCH
Travis中的源代码树将是您的拉取请求合并回最新的目标分支($TRAVIS_BRANCH,可能是master)。也就是说,HEAD是您的拉取请求合并到$TRAVIS_BRANCH中。
你需要的只是拉取请求和master之间的更改,可以通过以下命令获取:
$(git diff --name-only HEAD $(git merge-base HEAD $TRAVIS_BRANCH))

或者使用点点点记号来缩短

git diff --name-only HEAD...$TRAVIS_BRANCH

感谢 @ostrokach

如果您想检查内容,只考虑修改和添加的文件(忽略已删除的文件)也很有趣。

git diff --name-only --diff-filter=AM HEAD...$TRAVIS_BRANCH

3
这个有简写方式:git diff --name-only HEAD...master(中间是三个点)。更多信息请参见此处 - ostrokach
3
致命错误:模糊参数 'HEAD...master':未知的修订版本或路径不在工作树中。 - Kimmo Lehto
2
你可能想用 $TRAVIS_BRANCH 替换 master,这样当 PR 不是针对 master 分支时也能正常工作。 - Toon Verstraelen
2
应该是$TRAVIS_BRANCH...HEAD,因为HEAD有更新的提交。 - ahmet alp balkan

3
您应该在以下命令中使用$TRAVIS_BRANCHgit diff --name-only HEAD...$TRAVIS_BRANCH (由@Matthias Kuhn建议)。但是,在执行此命令之前,请先执行以下操作。
$ git remote set-branches --add origin $TRAVIS_BRNACH
$ git fetch
$ git diff origin/$TRAVIS_BRANCH # now works as normal

这是为了修复以下错误所必需的:
fatal: ambiguous argument 'HEAD...master': unknown revision or path not in the working tree.

使用$TRAVIS_COMMIT_RANGE也是可以的,但是如果在拉取请求的目标分支中有更改,它们也将被包括在内。如果在你的情况下这种情况不太可能发生(例如,一次只能创建一个到该分支的拉取请求),那么这个解决方案就更容易了。

命令是:

git diff --name-only $TRAVIS_COMMIT_RANGE

(如https://github.com/travis-ci/travis-ci/issues/6069所述)。



但是 git diff --name-only $TRAVIS_COMMIT_RANGE 不也会返回我们拉取的分支上修改过的文件吗? - Denis Rouzaud
我不明白你的意思。据我所见,它将返回所有即将合并到拉取请求目标分支中的提交更改。 - Ronyis
我认为它会返回PR中的所有更改以及分支上您尚未拥有的所有更改(大致上是已推送到主分支或其他分支的内容)。 - Denis Rouzaud
1
是的,事实上Ronyis的命令对于解决Travis上最近版本构建中的问题绝对必要,否则在拉取的副本中会缺少许多提交。 - Michael Scott Asato Cuthbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接