簡體   English   中英

很好地顯示文件重命名歷史記錄在git日志中

[英]nicely display file rename history in git log

git命令

git log --format='%H' --follow -- foo.txt

將為您提供觸及foo.txt的一系列提交,並在重命名后跟隨它。

我想知道是否有一個git log命令,它還會在每次提交旁邊打印相應的歷史文件名。

這將是這樣的,我們可以將'%F'解釋為文件名的(實際上不存在的)占位符。

git log --format='%H %F' --follow -- foo.txt

我知道這可以用

git log --format='%H' --follow --numstat -- foo.txt

但輸出並不理想,因為它需要一些非平凡的解析; 每個提交都遍布多行,您仍然需要解析文件重命名語法( "bar.txt => foo.txt" )以找到您要查找的內容。

你可以這樣簡化一下:

git log --format='%H' --name-only --follow -- README.md

這將給你輸出類似的東西

621175c4998dfda8da

README.md
d0d6ef0a3d22269b96

README.md

這應該更容易解析。 例如,你可以使用一個標記並將這些新行排除在外:

git log --format='%H%%' --name-only --follow -- README.md | sed ':a;N;$!ba;s/%\n\n/ /g'

這應該給你在同一行的哈希和文件名:

621175c4998dfda8da README.md
d0d6ef0a3d22269b96 README.md

有關sed調用的信息,請參閱如何使用sed替換換行符(\\ n)? 我的答案基於這個答案。

--name-status應該適合你:

git log --follow --name-status --format='%H' -- foo.txt

結果將如下所示,可以通過Perl或Python輕松解析:

'4da4d5e3e9c24251e14d20004a853b72bd096cce'

R100    b.txt   c.txt
'4966238c97198d096f0424a0a23ec550297d8086'

M       b.txt
'c0e41c11f0f7c5a7650cedfbad138c8941444023'

R100    a.txt   b.txt
'4b2318c0fbabd836d50cabd70bf19013d3964856'

A       a.txt

如果你堅持讓它在一行中,這個Perl單線程就可以了(它可以在Windows上運行。在Linux上,使用單引號或將$轉義為\\$ ):

git log --follow --name-status --format='%H' -- c.txt | perl -e "while(<>){chomp;print;<>;$_=<>;print q/ /,((split/\t/)[-1]);}"

打印:

'4da4d5e3e9c24251e14d20004a853b72bd096cce' c.txt
'4966238c97198d096f0424a0a23ec550297d8086' b.txt
'c0e41c11f0f7c5a7650cedfbad138c8941444023' b.txt
'4b2318c0fbabd836d50cabd70bf19013d3964856' a.txt

這適用於OSX終端:

git log --format='%%%h' --name-only --follow -- README.md | xargs echo | perl -pe 's/\%/\n/g'

暫無
暫無

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

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