2015-11-19 255 views
3

使用libgit2sharp我從兩個用戶合併更改:LibGit2Sharp如何解決衝突?

public void Merge(string branchName) 
{ 
    using (Repository repo = new Repository(this._settings.Directory)) 
    { 
     var branch = repo.Branches[branchName]; 
     MergeOptions opts = new MergeOptions() { FileConflictStrategy = CheckoutFileConflictStrategy.Merge }; 
     repo.Merge(branch, this._signature, opts); 

     if (repo.Index.Conflicts.Count() > 0) 
     { 
      //TODO: resolve conflicts 
     } 
    } 
} 

即使策略設置爲合併conflics仍然會出現。我找不到解決衝突的辦法。衝突對象沒有解析方法。

除了刪除文件或重命名文件之外,是否有解決代碼衝突的方法?有沒有自動解決功能?

謝謝你的幫助!

+0

合併衝突要麼必須手動解決,要麼需要用'theirs'或'our'樣式合併簽出來覆蓋文件。這與您通過CLI使用'git merge xxxx'必須執行的相同。 – SushiHangover

+0

@RobertN感謝您的重播。這是否意味着我必須找到衝突的文件,讀取文件的主體內容,以某種方式找到衝突的部分,用他們或我們的替換它,將內容寫入磁盤並再次調用合併? –

+0

其他人寫了一個答案,但關於你的評論,一旦你糾正/修復了衝突的文件,你將分階段提交它們,因爲你的本地回購仍然處於'合併'狀態 – SushiHangover

回答

4

LibGit2Sharp 確實做一個automerge。如果您看到衝突,那麼這些文件是不可合併的。無法合併的衝突的一個示例是兩個分支都更改同一個文件的同一個區域。

在這種情況下,LibGit2Sharp會將文件寫入工作目錄,並在衝突區域周圍標記。例如,如果某些文件foo.txt有衝突,它可能看起來像:

<<<<<<< HEAD 
this is a change in HEAD 
======= 
this is a change in the other branch 
>>>>>>> other branch 

要解決衝突,將您希望在工作目錄中接受的內容,然後使用Repository.Index.Add("foo.txt")階段,。

+0

謝謝您的重播。我會嘗試向用戶展示衝突的部分。現在很清楚如何解決衝突。謝謝! –