【发布时间】:2011-09-15 00:03:37
【问题描述】:
我希望 git 给我一份由一个用户修改的所有文件的列表,涵盖所有提交。
我的特殊用例是我参与了 ruby on rails 项目的 i18n,我们想知道哪些文件已经完成,哪些文件还需要完成。有问题的用户只在 i18n 上完成了工作,而不是在代码库的其余部分上完成了工作。所以信息应该都在git里面,但是不知道怎么弄出来。
【问题讨论】:
标签: git
我希望 git 给我一份由一个用户修改的所有文件的列表,涵盖所有提交。
我的特殊用例是我参与了 ruby on rails 项目的 i18n,我们想知道哪些文件已经完成,哪些文件还需要完成。有问题的用户只在 i18n 上完成了工作,而不是在代码库的其余部分上完成了工作。所以信息应该都在git里面,但是不知道怎么弄出来。
【问题讨论】:
标签: git
git log --pretty= --author=@abcd.com --name-only | sort -u | wc -l
在 git repo 中按公司显示所有修改过的文件。
git log --pretty= --author=user@abcd.com --name-only | sort -u | wc -l
在 git 存储库中按作者名称“用户”显示所有修改过的文件。
【讨论】:
| wc -l(可能与noted by joachim 相差一个)。不过,很好的补充是,请注意人们可以使用它通过电子邮件地址搜索“公司贡献”(尽管.mailmap file 可能是强制性的,因为人们有时会使用不同的电子邮件地址提交)!
这将为您提供一个简单的文件列表,仅此而已:
git log --no-merges --author="Pattern" --name-only --pretty=format:"" | sort -u
根据需要将 --author 切换为 --committer。
【讨论】:
--name-only 似乎只输出文件名。鉴于这一事实,--stat 和 --pretty=format:"" 的选项是什么?你能把它们排除在外吗?
--all 以使用所有本地分支
试试git log --stat --committer=<user>。只需将用户名放在--committer= 选项上(或酌情使用--author=)。
这将在每次提交时吐出所有文件,因此可能会有一些重复。
【讨论】:
这不是唯一的方法,但它确实有效:
git log --pretty="%H" --author="authorname" |
while read commit_hash
do
git show --oneline --name-only $commit_hash | tail -n+2
done | sort | uniq
或者,一行:
git log --pretty="%H" --author="authorname" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq
【讨论】: