列出Git/GitHub中拉取请求中更改的所有文件

Alf*_*ing 18 git github pull-request

有没有办法(从命令行)列出Git/GitHub中PR中更改的所有文件的名称?这将用于查找需要在该PR的Travis CI构建中运行哪些测试.

CI构建在调用脚本之前运行这些命令:

git clone --depth=50 git://github.com/jekyll/jekyll.git jekyll/jekyll
cd jekyll/jekyll
git fetch origin +refs/pull/2615/merge
git checkout -qf FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

小智 39

使用GitHub cli (gh)你可以运行:

gh pr view 2615 --json files --jq '.files.[].path'
Run Code Online (Sandbox Code Playgroud)

我做了一个,gh alias因为我经常使用它:

gh alias set pr_files "pr view $1 --json files --jq '.files.[].path'"
Run Code Online (Sandbox Code Playgroud)

然后我用gh pr_files 2615or来称呼它gh pr_files 2615 | cat

gh pr_files 2615 | cat
Run Code Online (Sandbox Code Playgroud)


zan*_*ock 30

通常,您可以列出在任意两次提交之间更改的文件git diff --name-only :

如何列出仅在两次提交之间更改的文件名?

(根据澄清编辑.)

这里的问题似乎是确定'合并基础'.如果所有分支都来自master,那么你可以这样做:

git --no-pager diff --name-only FETCH_HEAD $(git merge-base FETCH_HEAD master)

这将显示FETCH_HEAD分支点master与当前点之间的变化FETCH_HEAD.我在本地进行了测试,公关分支从master我认为它应该工作.

  • 没错,但是你也不想测试这些变化吗?如果在PR中更改了A,并且自PR以来B在主服务器上发生了更改,则B和A之间可能存在交互,因此A的测试将通过但是B上的测试失败. (2认同)
  • ostrokach:你是说`git --no-pager diff --name-only FETCH_HEAD...master` 等价于`git --no-pager diff --name-only FETCH_HEAD $(git merge-base FETCH_HEAD master )`?我在本地尝试过,但没有得到相同的结果。 (2认同)

小智 5

Chrome 控制台...

注意:如果 Github 更改页面中的标签/类/ID,这将中断。

const fileElems = document.querySelectorAll('#files div.js-diff-progressive-container div.file div.file-header div.file-info a.Link--primary');
const filePaths = [];
        
for (let a of fileElems) {
    filePaths.push(a.title);
}
    
const filePathsStr = filePaths.join('\n');
console.log(filePathsStr);
copy(filePathsStr);
console.log('Copied to the clipboard as well ');
Run Code Online (Sandbox Code Playgroud)


Jay*_*122 5

特别是对于 GitHub,这可以使用 REST API 来完成

GET /repos/:owner/:repo/pulls/:pull_number/files
Run Code Online (Sandbox Code Playgroud)

为此,您可以使用GitHub 库之一。