我能告诉我一个用户修改过的所有文件吗?

Ham*_*ner 134 git

我想git给我一个列表,列出一个用户在所有提交中修改的所有文件.

我的特殊用例是我参与了一个ruby on rails项目的i18n,我们想知道哪些文件已经完成以及哪些文件仍然需要完成.有问题的用户只完成了i18n的工作,而不是代码库的其余部分.因此,所有信息都应该是git,但我不知道如何解决这个问题.

h0t*_*1r3 175

这将为您提供一个简单的文件列表,没有别的:

git log --no-merges --author="Pattern" --name-only --pretty=format:"" | sort -u
Run Code Online (Sandbox Code Playgroud)

根据需要切换--committer的作者.

  • 虽然有一个小故障,但效果很好:它在输出的开头生成一个空白链接,这意味着通过 'wc -l' 对结果进行管道传输以获取文件计数减少了 1。 (3认同)
  • 请注意,这仅列出当前 HEAD 下发生的修改,即 除当前签出的分支机构外,不得有其他分支机构。添加 `--all` 以使用所有本地分支 (2认同)

Ste*_*ice 111

这不是唯一的方法,但它有效:

git log --pretty="%H" --author="authorname" |
    while read commit_hash
    do
        git show --oneline --name-only $commit_hash | tail -n+2
    done | sort | uniq
Run Code Online (Sandbox Code Playgroud)

或者,作为一行:

git log --pretty="%H" --author="authorname" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq
Run Code Online (Sandbox Code Playgroud)

  • 皮肤猫的方法总是不止一种.这就是我从头脑中想出来的结果.效率在这里并不重要.无论如何,谢谢你的downvote. (47认同)
  • 我只是在一个拥有几千次提交的回购中使用它,它是瞬间完成的. (3认同)
  • 这非常低效.不需要在循环中调用git,请参阅下面的答案. (2认同)

Rob*_* S. 7

试试git log --stat --committer=<user>.只需将用户名放在--committer=选项上(或--author=根据需要使用).

这会吐出每次提交的所有文件,因此可能会有一些重复.