【问题标题】:List files modified in a pull request within Travis列出在 Travis 的拉取请求中修改的文件
【发布时间】:2017-04-29 22:15:17
【问题描述】:

我想列出在 travis 上的 pull request 中修改的所有文件。

我尝试了$(git diff --name-only $TRAVIS_PULL_REQUEST_BRANCH $(git merge-base $TRAVIS_PULL_REQUEST_BRANCH master)),但 git 不知道 TRAVIS_PULL_REQUEST_BRANCH,因为它在一个分叉的 repo 上。

我还尝试了git rev-list 和 $TRAVIS_COMMIT_RANGE,但它还包括主分支上的新提交。

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

【问题讨论】:

    标签: git github travis-ci pull-request


    【解决方案1】:

    你快到了。

    在这种情况下没有理由使用环境变量$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
    

    【讨论】:

    • 有一个简写形式:git diff --name-only HEAD...master(三个点)。有关详细信息,请参阅here
    • fatal: ambiguous argument 'HEAD...master': unknown revision or path not in the working tree.
    • 你可能想用 $TRAVIS_BRANCH 替换 master,这样当 PR 是针对 master 之外的另一个分支时它也可以工作。
    • 不应该是$TRAVIS_BRANCH...HEAD,因为 HEAD 有更新的提交?
    【解决方案2】:

    您应该在以下命令中使用$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

    【讨论】:

    • 但是git diff --name-only $TRAVIS_COMMIT_RANGE 不是也会返回我们要拉的分支上的修改文件吗?
    • 我不明白你的意思。如我所见,它将返回即将合并到拉取请求目标分支的提交中的所有更改。
    • 我认为它会返回 PR 中的所有更改 + 您在分支上还没有的所有更改(或多或少同时推送到 master 或任何分支的内容)
    • 是的,事实上,Ronyis 的命令对于解决 Travis 最近构建的问题是绝对必要的,否则在拉取的副本中会丢失许多提交。
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2016-06-16
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多