2013-05-11 71 views

回答

2

我不認爲它應該是LibGit2Sharp發起外部進程的責任。 LibGit2Sharp的目標是提供一種輕鬆操作git存儲庫的方法。

這意味着你可以用它來:

  • 獲取在工作目錄的文件和前一版本(索引)之間的差異。要做到這一點,您可以使用Repository.Diff.Compare(IEnumerable<string> paths, bool includeUntracked, ExplicitPathsOptions explicitPathsOptions)過載,該過載返回TreeChanges對象。從那裏,你可以通過treeChanges的索引器獲得一個TreeEntryChanges對象,該索引器對應於給定文件的變化(使用.Patch屬性獲取修補程序的實際內容)。

  • 使用Repository.Config命名空間獲取所配置的比較工具(例如:repo.Config.Get<string>("diff.tool").Value,但你也應該檢查該Get()方法返回的值是空的情況下,沒有差異的工具已經由用戶配置)。這樣,你可以自己啓動diff工具。

其他資源(v0.11.0):


注意:它似乎在某些時候,你需要知道一條線是否已經改變。我不認爲現在有一種簡單的方法可以做到這一點(除了手動解析補丁內容)。然而,在LibGit2Sharp issue tracker上打開一個問題可能會引發一些討論(可以隨意權衡什麼樣的API,你想要這麼做!)。


編輯:啓動外部比較工具之前,你需要它是在一個臨時文件夾的索引文件的複製內容。您可以通過執行以下操作來查找索引中的文件的blob:

  • var indexEntry = repo.Index [fileName];
  • var blob = repo.Lookup(indexEntry.Id);

但是...當您獲取blob內容時,目前沒有應用過濾器,因此比較可能會由於crlf差異而產生誤報。 目前有一個issue在libgit2上打開,以便提出一個允許應用過濾器的API。

+0

謝謝你!與此同時,我發現了關於Repository.Config的更多細節。 關於行更改我已經有東西是解析差異,但我只是等待有此更改https://github.com/libgit2/libgit2sharp/pull/423 – 2013-05-21 06:10:15