[英]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.