2015-06-19 71 views
3

運行repo.Network.Pull()命令後,我希望能夠看到哪些文件已添加到存儲庫,在存儲庫中更改並從存儲庫中刪除。我需要的只是文件的文件路徑,如果它是添加/更新或刪除。LibGit2Sharp查找哪些文件被更新/添加/刪除後

有沒有簡單的方法來做到這一點?我試過調查Diff.Compare(),但我不確定這是否是正確的做法。

+0

可能重複[LibGit2Sharp獲取存儲庫更改後拉](http://stackoverflow.com/questions/30758362/libgit2sharp-get-repository-changes-after-pull) – nulltoken

+0

'Diff.Compare'確實是去;-)請參閱https://stackoverflow.com/questions/30758362/libgit2sharp-get-repository-changes-after-pull/30759152#30759152進一步的細節 – nulltoken

回答

2

LibGit2Sharp 0.21.0.176

這裏是您行走當前提交的樹和獲取更改過的文件和變化的類型的libGit2例子。

的Git版本:

git log --name-status --pretty=oneline 

1d9d4bb881f97f5d3b67741a893f238e7221e2b1 Updated readme with fork info 
M  README.md 
58cc5c41963d5ff68556476158c9c0c2499e061c Update Makefile for PE32+ (platform:x64) assemblies 
M  Makefile 
M  README.md 
a7823c1c0a737c5218d33691f98828c78d52130b Fix Makefile for 64-bit native lib and add README.md 
M  Makefile 
A  README.md 
ea7e6722f67569cb9d7a433ff2c036fc630d8561 Update solution files. 
M  mono-curses.csproj 
M  mono-curses.sln 
05dbe6e18895d1037ce333b0a1f652eeae3f8b33 Fix resize handling. 
M  attrib.c 
M  gui.cs 

libGit2版本:

var repo = new LibGit2Sharp.Repository ("/your/repo/path"); 
    foreach (Commit commit in repo.Commits) { 
     foreach (var parent in commit.Parents) { 
      Console.WriteLine ("{0} | {1}", commit.Sha, commit.MessageShort); 
      foreach (TreeEntryChanges change in repo.Diff.Compare<TreeChanges>(parent.Tree, 
      commit.Tree)) { 
       Console.WriteLine ("{0} : {1}", change.Status, change.Path); 
      } 
     } 
    } 

輸出:

1d9d4bb881f97f5d3b67741a893f238e7221e2b1 | Updated readme with fork info 
Modified : README.md 
58cc5c41963d5ff68556476158c9c0c2499e061c | Update Makefile for PE32+ (platform:x64) assemblies 
Modified : Makefile 
Modified : README.md 
a7823c1c0a737c5218d33691f98828c78d52130b | Fix Makefile for 64-bit native lib and add README.md 
Modified : Makefile 
Added : README.md 
ea7e6722f67569cb9d7a433ff2c036fc630d8561 | Update solution files. 
Modified : mono-curses.csproj 
Modified : mono-curses.sln 
05dbe6e18895d1037ce333b0a1f652eeae3f8b33 | Fix resize handling. 
Modified : attrib.c 
Modified : gui.cs 

直接回答你的問題,只是搶到第一從提交枚舉提交和比較它的樹與它的父母(可能由於合併而超過一個父母)與我的例子循環當前分支中的所有提交。

+0

如果我拉,然後抓住第一次提交如何,我會知道有多少父母(由於合併)。會提交。父母處理? – Nived

+0

如果合併發生,提交將有1個或更多父母。即這個數組(commit.Parents.Select(p => p.Id.Sha).ToArray())將包含每個父代的提交的SHA。 – SushiHangover