2016-08-05 109 views
5

我想得到我的分支中的所有文件的列表,最好在樹形視圖中,以及它們最後被修改的提交的哈希值(即不是文件本身的散列,而是提交的散列)。有沒有一個整潔的git命令來做到這一點,還是我真的必須爬過日誌?git:列出所有文件名和他們最新的提交的哈希

這個問題是關係到How do I find the most recent git commit that modified a file?,但我想獲得的所有文件的列表,例如:

6f88a51 abc.h 
3f5d6fb abc.cpp 
3f5d6fb bcd.h 
1964be2 bcd.cpp 
... 
+0

如何使用'git日誌 - ?? – Shravan40

回答

1

命令:

$ git ls-files -z \ | GIT_PAGER= xargs -0 -L1 -I'{}' git log -n 1 --format="%h {}" -- '{}' f5fe765 LICENSE 0bb88a1 README.md 1db10f7 example/echo.go e4e5af6 example/echo_test.go ...

注:

  • git ls-files列出所有文件添加到遞歸的git(不像find,它排除了未跟蹤文件和.git
  • xargs -L1給定的命令對每個輸入參數(文件名)
  • xargs -I{}使{}符號的置換用git ls-files -zxargs -0變化
  • 輸入參數(文件名)的定界符從\n\0,以避免與在白空間的潛在問題執行文件名
  • 結算GIT_PAGER防止git log從管道其輸出到less
+0

arigato,非常好! blue112解決方案也可以正常工作,但我發現你更好 –

2
for i in $(find -type f | grep -v '.git'); 
    do echo -n "$i - "; 
    git log --pretty="format:%h" -1 $i | cat; 
    echo; 
done 

這應該做的伎倆,在慶典

+0

謝謝,也給了我我想要的,但我更喜歡gavvs解決方案,因爲它更優雅 –

0

您可以簡單地使用ls-tree命令

git ls-tree HEAD 

這將顯示帶有哈希的最新文件。

enter image description here

+1

這是不正確的。它顯示了斑點和樹(OP明確表示他不想要)的SHA-1,而不是觸及文件的最新提交的SHA-1。 – Alderath

+0

@Alderath是對的,它顯示文件哈希值,不提交哈希值。此外,它不遞歸地打印目錄。 – gavv

+0

雖然這不是預期的,但git ls-tree -r HEAD可以顯示HEAD樹中的所有blob。 – ElpieKay

相關問題