用Git,如何找到修改目录内容的人?

时间:2015-04-14 13:05:37

标签: git

如何在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

我不怕编写脚本,所以它不需要是一个完整的解决方案。

3 个答案:

答案 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>|