簡體   English   中英

使用Git,如何查找誰修改了目錄內容?

[英]With Git, how to find who modified directory contents?

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

我不擔心腳本編寫,因此它不必是一個完整的解決方案。

如何在Git中找到誰最后修改目錄的內容?

如果用“目錄內容”來表示“工作樹”(又稱工作目錄 ),那么答案很簡單:您不能。 至少,不僅僅是Git。

原因是,在Git中,只有當創建提交對象時,一個人的名字才會附加到更改中。 僅進行本地更改甚至分段更改(即修改索引)都沒有任何名稱。 就Git所知,您的祖母可能已經做到了。

你是這個意思嗎

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 {}" {} \;

您是否在尋找“ 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>|

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM