2013-01-07 128 views
16

經過大量搜索後,我還沒有找到一個令人滿意的方法,可以方便地查看Git中移動文件的完整歷史記錄,更重要的是可以查看Gitk中的重要文件。使用「git log --follow [filePath]」甚至是「gitk --follow [filePath]」可以提供文件涉及的提交,但不會顯示移動前文件的實際更改歷史記錄。因此,我提出了一個簡單而簡單的解決方法。使用gitk查看移動文件的完整歷史記錄

  1. 對已被移動的文件做一個gitk:「gitk [newFilePath]」。複製第一次提交的SHA1 ID,這應該是文件已被移動的提交。
  2. 對複製的SHA1 ID執行gitk:「gitk [SHA1ID]」。最新的承諾應該是當這一舉動發生時。找到移動的文件並複製舊的路徑。
  3. 請在我們剛纔複製的SHA1 ID和舊文件路徑gitk:「gitk [SHA1ID] - [oldFilePath]」

這個過程將允許您之前查看該文件的歷史記錄移動。如果有多次移動,則可以重複上述過程。

如果這個問題有更好的解決方法,特別是如果有一種方法可以將這些步驟結合起來顯示移動過程中的完整歷史記錄,我們將非常感謝。

回答

7

如果你想看到在每個所做的更改提交即使該文件已被重命名,你可以使用-pgit log的選項:

git log -p --follow [file/with/path] 
+0

這是一個很好的解決方案!我看到其他人的解決方案之前使用-p開關和「git log --follow」。這將是首選在gitk中看到它,但我一定會使用這種方法! –

+0

如果你仍然在尋找一種GUI方式來做到這一點 - 嘗試SourceTree(鏈接在我的答案) – Chris

3

這裏是一個要告訴你歷史上的bash函數在其所有的化身文件(用gitk來)......我會離開它作爲一個練習的讀者,如果他們需要它的另一個shell:

# bash 
gitk_follow() { 
    while (("$#")); do 
    git log --oneline --name-status --follow $1; 
    shift; 
    done | perl -ne 'if(s{^(?:[ACDMRTUXB]|R\d+)\s+}{}) { s{\s+}{\n}g; print; }' | sort -u 
} 

# used as: 
gitk $(gitk_follow some_file) 

更新:

更改爲使用Perl,因爲我沒有足夠關注上一版本中git log的輸出。

+0

非常好,謝謝!我必須使用'--',儘管:'gitk - $(gitk_follow some_file)'。 –

0

另一種替代方法是使用由Atlassian開發的SourceTree應用程序(GUI)。在應用程序內部,您可以右鍵單擊文件並選擇「Log Selected ...」

Log Selected

在彈出的窗口中,然後它可以讓你「跟着重命名的文件」:

enter image description here

我也用GitHub for Mac,但並沒有看到這樣的功能在裏面,但。

使用不同的git的日誌選項和awk苛求的文件名(我不附屬於任何一方的!)

+0

是否有任何可用的Linux變種? –

0

一個簡單函數(和「 - 」那gitk需要的是包括):

# bash 
gitk_follow() { 
    while (("$#")); do 
    git log --pretty="" --name-status --follow $1; 
    shift; 
    done | awk '{print $NF}' | sort -u 
} 

# used as: 
gitk -- $(gitk_follow some_file) 
相關問題