2016-04-29 118 views
0

我会尝试将分支合并到另一个分支,但我总是有一个MergeConflictException。所以我尝试着将所有的repository.Index.Conflicts分段,但是没有任何改变。LibGit2Sharp - 合并分支

string[] conflictArray = new string[10000]; 
try { 
    repository.Merge(branch[selected], GitHelper.getSignature(), options); 
} catch(MergeConflictException e) { 
    if (repository.Index.Conflicts.Count() > 0) { 

     foreach (var c in repository.Index.Conflicts) { 
      repository.Index.Stage(c.Theirs.Path); 
     } 

    } 
} 

我'搜索了很多有任何帮助,我从LibGit2Sharp.Tests读取MergeFixture.cs。

编辑:对不起,我不告诉你为什么我在这工作,但我是学生,我的老师给了我这个项目用.NET 3.5做的,所以我使用最新的3.5版本的LibGit2Sharp。

+0

你是什么意思“没有任何变化”?您是否在合并解决之后提交?但请注意,如果遇到合并冲突,则需要解决它。如果您在不解决冲突的情况下暂存所有这些文件,则会在其中包含冲突标记。在那里做正确的事情要么放弃,要么取决于你写的程序类型。 –

+0

我在提出问题之前展示了这个:http://stackoverflow.com/questions/33812895/libgit2sharp-how-to-resolve-a-conflict 我告诉'没有任何改变',因为我每次都有相同的异常。那么你能帮我解决冲突吗? – Daethe

+0

为什么你上传评论的代码?这很混乱。 – Joseph

回答

1

MergeConflictException无可否认是一个误导性的名字。这并不意味着合并冲突。这并不例外,这很正常,并没有引发异常。这意味着在合并期间写入文件存在冲突。 (但更多关于这一秒。)

事实上,您的工作目录中有文件已被修改并受合并影响。你可以执行一个合并,如果你有工作目录中修改的文件如果该文件没有改变你正在合并的分支或当前分支(相对于共同的祖先)。

但是你几乎可以肯定想要做的只是当你的工作目录没有任何改变时才开始合并。请合并前存储或提交更改。如果你确信你的工作目录中没有任何chane,那么correct yourline endings

(注意了,它被重命名,以帮助避免这种混乱MergeConflictException不存在。)

+0

我使用.Net 3.5 LibGit2Sharp的最新版本,因为该项目基于我的老师给出的先决条件。我必须将其功能与Git进行接口和集成。 我试图列出所有的冲突路径,但我注意到祖先和他们是相似的,但我们是空的。所有这些冲突都发生在删除的文件上。这是正常的 ? – Daethe

+0

如果你有'Ours'为空的冲突,那么你的分支已经被删除了,而另一个则被修改了。非常正常。 –