【问题标题】:LibGit2Sharp how to resolve a conflict?LibGit2Sharp如何解决冲突?
【发布时间】:2016-02-22 03:02:52
【问题描述】:

使用 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
        } 
    }
}

即使策略设置为合并,冲突仍然会出现。我没有找到解决冲突的方法。 Conflict 对象没有 Resolve 方法。

除了删除文件或重命名文件之外,还有其他方法可以解决代码冲突吗?有自动解析功能吗?

感谢您的帮助!

【问题讨论】:

  • 合并冲突要么必须手动解决,要么您需要使用theirs 或our 样式合并检出覆盖文件。这与您必须通过 CLI 使用 git merge xxxx 执行的操作相同
  • @RobertN 感谢您的重播。这是否意味着我必须找到一个冲突文件,读取文件的整个内容,以某种方式找到冲突的部分,用他们的或我们的替换它,将内容写入磁盘,然后再次调用 Merge?
  • 其他人写了一个答案,但是关于您的评论,一旦您更正/修复了冲突的文件,您将比暂存并提交它们,因为您的本地存储库仍处于状态'合并'
  • @RobertN 好的,我会试试的。谢谢!

标签: c# .net libgit2sharp


【解决方案1】:

LibGit2Sharp 会进行自动合并。如果您看到冲突,则这些文件是不可合并的。不可合并冲突的一个示例是两个分支更改同一文件的同一区域。

在这种情况下,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") 暂存它。

【讨论】:

  • 感谢您的重播。我将尝试向用户展示冲突的部分。现在很清楚如何解决冲突。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2016-02-29
  • 1970-01-01
相关资源
最近更新 更多