libgit2 / libgit2sharp

Git + .NET = ❤
http://libgit2.github.com
MIT License
3.13k stars 879 forks source link

MergeOptions: TargetLimit (merge.renameLimit) is being ignored during merge operation #1982

Open davidnemeti opened 1 year ago

davidnemeti commented 1 year ago

Reproduction steps

The sourceBranch and targetBranch has a commonAncestorCommit with an existing file Foo.cs. A lot of (let's say: 3000) other files exist too.

The sourceBranch contains one single extra commit on top of commonAncestorCommit with a modification inside a file Foo.cs.

The targetBranch (current branch) contains one single extra commit on top of commonAncestorCommit in which the file Foo.cs has been renamed to Bar.cs, and a lot of (let's say: 2000) other files have also been renamed.

The following merge from sourceBranch to targetBranch ignores TargetLimit (merge.renameLimit), and causes an unnecessary conflict:

using (var repo = new Repository(...))
{
    Commands.Checkout(repo, targetBranch);
    var mergeOptions = new MergeOptions { TargetLimit = 7000 };
    repo.Merge(sourceBranch, mergerSignature, mergeOptions)
}

Expected behavior

A successful merge without conflict.

Actual behavior

We are staying in the ongoing merge operation, and the git status reports conflict for the file Foo.cs stating that it has been "deleted by us".

Note that the plain git merge command can merge this without conflicts if the merge.renameLimit setting is set to 7000 in the .gitconfig file.

Version of LibGit2Sharp (release number or SHA1)

LibGit2Sharp 0.26.2 LibGit2Sharp 0.27.0-preview-0182

Operating system(s) tested; .NET runtime tested

Windows 10 Enterprise N .NET 6.0.8