如何在Git中找到最后修改过的目录内容?在一个理想的世界中,我希望ls
的输出前缀相同的东西git blame
。因此,对于存储库的每个跟踪目录,找到最后修改它的人。
举个例子,假设这是目录结构:
|-project
|-dir-a
|-file1.txt (modified by Alice in commit 1)
|-file2.txt (modified by Bob in commit 2)
|-file5.txt (modified by Carl in commit 4)
|-dir-b
|-file3.txt (modified by Alice in commit 3)
|-file4.txt (modified by Alice in commit 3)
然后我在project/
中运行的脚本会生成这样的内容:
$ unknown-command
commit4 Carl dir-a
commit3 Alice dir-b
我不怕编写脚本,所以它不需要是一个完整的解决方案。
答案 0 :(得分:3)
如何在Git中找到上次修改目录内容的人?
如果,通过“目录内容”,你的意思是“工作树”(a.k.a。working directory),答案很简单:你做不到。至少,不仅仅是Git。
原因在于,在Git中,只有当一个人创建commit object时,其名称才会附加到更改中。仅仅进行本地更改甚至暂存更改(即修改索引)与任何名称无关。对于所有Git都知道,你的奶奶可能已经做到了。
答案 1 :(得分:3)
你的意思是这样吗?
for i in $(ls -1); do git log --format=format:"%h %<(28)%ai %<(30)%an $i" -n1 $i; done
...生产:
7a29533 2015-02-27 19:19:45 +0100 David Ostrovsky BUCK
6f083b8 2014-11-22 11:16:14 +0100 David Ostrovsky bucklets
686bfea 2014-12-04 14:23:30 +0900 David Pursehouse contrib
23571ab 2008-11-14 16:56:58 -0800 Shawn O. Pearce COPYING
...
编辑:感谢ghoti的评论 - 解析ls
确实是一个坏主意。
此版本适用于文件名中的空格:
find . -maxdepth 1 -exec git log -n1 --format=format:"%h %<(28)%ai %<(30)%an {}" {} \;
答案 2 :(得分:0)
您在寻找“git log --name-status”吗?
$ git lg --name-status
* 67475d0 - (HEAD, origin/master, master) 2015-04-09-rename-files-in-batch.html <lgfang@5 days ago>|
| A _posts/util/2015-04-09-rename-files-in-batch.html
* 2098891 - 2015-04-07-kindle-dedrm: add <lgfang@6 days ago>|
| A _posts/rec/2015-04-07-kindle-dedrm.html
* a96fc4e - 2015-04-07-snmptrapd: add <lgfang@6 days ago>|
| A _posts/network/2015-04-07-snmptrapd.html
* 059342f - 2014-03-26-java-cover: add <lgfang@8 days ago>|