2015-11-19 149 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

谢谢您的重播。我会尝试向用户展示冲突的部分。现在很清楚如何解决冲突。谢谢! –