列出在 Travis 中的拉取请求中修改的文件

List files modified in a pull request within Travis

我想在 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 但它还包括主分支上的新提交。

知道如何获取 PR 专门修改的文件吗?

你快到了。

在这种情况下没有理由使用环境变量 $TRAVIS_PULL_REQUEST_BRANCH

travis 中的源代码树将把您的拉取请求合并回最近的目标分支($TRAVIS_BRANCH,可能 master)。也就是说,HEAD 是您合并到 $TRAVIS_BRANCH.

中的拉取请求

你想要的只是你的 pull request 和 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

您应该在以下命令中使用 $TRAVIS_BRANCH

git 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.

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


也可以使用 $TRAVIS_COMMIT_RANGE,但如果 拉取请求的目标分支有变化,它们也将被包括在内。如果您的情况不太可能出现这种情况(例如,一次只能创建一个到该分支的拉取请求),那么此解决方案更简单。

命令是:

git diff --name-only $TRAVIS_COMMIT_RANGE