libgit2 / libgit2/libgit2sharp

Two conflicts instead of one for renamed file

未关闭
#1,931 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

主要语言
C#
星标
3.5k
派生
925
PR 合并指标
30 天内没有已合并 PR

描述

Reproduction steps
  1. Checkout commit https://github.com/ydanila/test_git from https://github.com/ydanila/test_git
  2. Renamed README.md to README2.md and commit (will be marked as renamed)
  3. Pull changes from 'main' using this code
public void Pull(string branch)
{
	using (var repo = new Repository(this.repoPath))
	{
		Configuration config = repo.Config;
		var mergeOptions = new MergeOptions
		{
			FailOnConflict = true,
			OnCheckoutProgress = OnCheckoutProgress
		};

		PullOptions options = new PullOptions
		{
			FetchOptions = new FetchOptions { CredentialsProvider = this.GetCredentialsProvider() },
			MergeOptions = mergeOptions
		};

		var trackingBranch = repo.Branches[branch];

		Signature buildSignature = config.BuildSignature(DateTimeOffset.Now);
		var mergeResult = Commands.Pull(repo, buildSignature, options);

		if (mergeResult.Status == MergeStatus.Conflicts)
		{
			repo.Merge(trackingBranch.TrackedBranch, buildSignature);
			ConflictCollection conflicts = repo.Index.Conflicts;
			var changes = new List<ContentChanges>();
			foreach (Conflict conflict in conflicts)
			{
				//	...
                        }
		}
	}
}
Expected behavior

As mergeOptions.FindRenames == true it returns one conflict which has Ancestor==Readme.md, Ours==Readme2.md and Theirs==null (file deleted)

Actual behavior

It returns two conflicts.
First:
2021-12-06 20_58_25-Window
Second:
2021-12-06 21_06_05-Aehnlich (Отладка) - Microsoft Visual Studio

Version of LibGit2Sharp (release number or SHA1)

Latest: 4daf6189b0e20f878348b262d1846eb25bc6d7f6

Operating system(s) tested; .NET runtime tested

Windows .Net Fw 4.7.2

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

使用链接的 test_git 仓库和启用 MergeOptions.FindRenames 的 Pull 方法重现冲突。首先检查 Commands.Pull、repo.Merge 和 repo.Index.Conflicts;当重命名文件的情况报告一个冲突,且 Ancestor、Ours 和 Theirs 的值符合预期时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
csharp, git
领域
devtools
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。