我想在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专门修改的文件吗?
答案 0 :(得分:5)
你快到了。
在此方案中没有理由使用环境变量$TRAVIS_PULL_REQUEST_BRANCH
。
travis中的源树将是您的pull请求合并回最新的目标分支($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
答案 1 :(得分:0)
您应按以下命令使用$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