2012-06-18 34 views
5

我想找出所有改變了一行代碼的作者。 Git-log可以在文件級別執行。我閱讀手冊頁,它似乎像git日誌不能在行級別。有沒有辦法使用git命令來做到這一點,或者我需要爲自己編寫一個腳本?可以找出所有曾經更改過代碼行的作者嗎?

爲了我的目的,我想這樣做所有代碼行。我正在這樣做,爲我的研究產生作者培訓數據。

+2

您可以責怪/註釋以獲取每個修訂版級別的信息。一旦你引入了多個修訂版本,「誰改變了一條線」開始成爲一個模糊的問題。 –

+0

這是什麼意思? –

+0

@Tomasz:搜索特定行的歷史記錄非常有用,尤其是當您想要查看代碼庫中存在多長時間的錯誤或誰觸及特定函數時。 – Christopher

回答

3

您想結合git log上的-S--pretty標誌。

git log手冊頁中,-S鎬搜索:

-S<string> 
     Look for differences that introduce or remove an instance of <string>. Note that this is different than the string simply appearing in diff output; 
     see the pickaxe entry in gitdiffcore(7) for more details. 

這個標誌查找所有改變一個特定的字符串。 Using an example from another SO answer,git log -g -Ssearch_for_this將搜索歷史記錄以查找「search_for_this」的所有更改。

將其與--pretty結合使用可以獲得更好的效果。例如,該命令將通過歷史搜索更改爲「富」並返回縮短哈希,其次是作者,兩個破折號,消息,兩個破折號的第一行,日期:

$ git log -Sfoo --pretty=format:'%h %an -- %s -- %ad' 
bc34134 Sally Developer -- Fixed all bugs and made all clients happy forever -- Tue Jan 31 17:41:17 2025 -0500 
+0

你的意思是把-S的選項後面的內容放進去?這可以幫助我找出改變字符串的提交,但是我仍然需要找出該行的前一個表單,並繼續使用該方法,直到沒有以前版本的行爲? – user1440858

+0

嗯。是。這個解決方案只會讓你達到引入的地步。如果你想跟蹤過去的變化,它將無法工作。也許這個? https://github.com/renard/git-line-history通過谷歌發現。不知道它是否有效,但它利用'git blame'。 – Christopher