libgit2 / libgit2/libgit2sharp

Two conflicts instead of one for renamed file

オープン
#1,931 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
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. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

リンクされた test_git リポジトリと、MergeOptions.FindRenames を有効にした Pull メソッドを使って競合を再現します。まず Commands.Pull、repo.Merge、repo.Index.Conflicts を調べます。名前変更されたファイルのケースで、Ancestor、Ours、Theirs に期待される値を持つ 1 件の競合が報告されれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
csharp, git
領域
devtools
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。