2015-06-04 36 views
0


我需要獲取方法列表的作者。
我試圖通過使用LibGit2Sharp比較方法名和補丁內容來做到這一點,但它太長了,還有很多提交。
我想快速做到這一點,不知何故像代碼鏡頭。
現在我試圖通過自己的VS插件獲取它,可能有一些easyer方法。
謝謝。獲取方法的作者,如codelens

回答

0

看看git blame filename輸出。看來這個LibGit2Sharp supports。如果您知道方法開始和結束的行號,可以運行它以獲得特定方法。通過運行git blame -L 1,10 filename,您將看到文件中最後一次變化的行1-10。

+0

責備不起作用完美。 有時它不能得到初始提交。 – FeniXVRN

+0

不幸的是,我沒有安裝VS 2013 Ultimate,因此無法使用codelens功能進行實驗,以查看它究竟如何找到方法的作者。我唯一的假設是,它針對特定的文件行運行'git blame',然後尋找這些行中最受歡迎的編輯器。 –

+0

感謝您的想法,我發現git log --follow更正確:) – FeniXVRN

0

有由非搜索的代碼示例:

var blames = repo.Blame(parameters.FilePath.Replace(_repository, "")); 
var commitDate = DateTime.Now; 
foreach (var blame in blames) 
{ 
    if (blame.InitialCommit.Sha != (blame.InitialCommit.Parents.FirstOrDefault() == null ? blame.InitialCommit.Sha : blame.InitialCommit.Parents.First().Sha) && 
     (!blame.InitialCommit.Message.ToLower().Contains("merge"))) 
    { 
     Tree commitTree1 = repo.Lookup<LibGit2Sharp.Commit>(blame.InitialCommit.Sha).Tree; 
     Tree commitTree2 = repo.Lookup<LibGit2Sharp.Commit>(blame.InitialCommit.Parents.FirstOrDefault() == null ? blame.InitialCommit.Sha : blame.InitialCommit.Parents.First().Sha).Tree; 
     string content = repo.Diff.Compare<Patch>(commitTree1, commitTree2).Content; 
     if (content.Contains(parameters.TestName)) 
     { 
      if (commitDate.CompareTo(blame.InitialSignature.When.Date) > 0) 
      { 
       commitDate = blame.InitialSignature.When.Date; 
       author = string.Format("Email: {0}; Name: {1}", blame.InitialCommit.Author.Email, blame.InitialCommit.Author.Name); 
      } 
     } 
    } 
}