subversion-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeb Wilson <>
Subject Re: Mergeinfo overwritten from successive merges
Date Fri, 14 Mar 2014 01:18:12 GMT

I've reproduced this mergeinfo overwriting issue using the following steps. We are seeing
this with svn client v1.8.8, and using a remote VisualSVN server v2.7.0 (which uses svn v1.8.8).
NOTE: This cannot be replicated by using a locally created repo...we've only been able to
replicate with VisualSVN remotely.

We started out by creating an empty repo called TestRepo on the server. Then:

E:\Colspace\sandbox2>mkdir fullrepo

E:\Colspace\sandbox2>svn checkout fullrepo

Checked out revision 0.

E:\Colspace\sandbox2>cd fullrepo

E:\Colspace\sandbox2\fullrepo>svn mkdir trunk
A         trunk

E:\Colspace\sandbox2\fullrepo>svn mkdir branch
A         branch

E:\Colspace\sandbox2\fullrepo>svn commit -mm .
Adding         branch
Adding         trunk

Committed revision 1.

E:\Colspace\sandbox2\fullrepo>cd ..

E:\Colspace\sandbox2>mkdir trunk

E:\Colspace\sandbox2>mkdir user1_branch

E:\Colspace\sandbox2>mkdir user2_branch

E:\Colspace\sandbox2>svn checkout trunk
Checked out revision 1.

E:\Colspace\sandbox2>svn checkout user1_branch
Checked out revision 1.

E:\Colspace\sandbox2>svn checkout user2_branch
Checked out revision 1.

E:\Colspace\sandbox2>echo "file1" > trunk/file1.txt

E:\Colspace\sandbox2>svn add trunk/file1.txt
A         trunk\file1.txt

E:\Colspace\sandbox2>svn commit -mm trunk
Adding         trunk\file1.txt
Transmitting file data .
Committed revision 2.

E:\Colspace\sandbox2>echo "file2" > trunk/file2.txt

E:\Colspace\sandbox2>svn add trunk/file2.txt
A         trunk\file2.txt

E:\Colspace\sandbox2>svn commit -mm trunk
Adding         trunk\file2.txt
Transmitting file data .
Committed revision 3.

E:\Colspace\sandbox2>svn merge -c2 user1_branch
--- Merging r2 into 'user1_branch':
A    user1_branch\file1.txt
--- Recording mergeinfo for merge of r2 into 'user1_branch':
U   user1_branch

E:\Colspace\sandbox2>svn commit -mm user1_branch
Sending        user1_branch
Adding         user1_branch\file1.txt

Committed revision 4.

E:\Colspace\sandbox2>svn merge -c3 user2_branch
--- Merging r3 into 'user2_branch':
A    user2_branch\file2.txt
--- Recording mergeinfo for merge of r3 into 'user2_branch':
U   user2_branch

E:\Colspace\sandbox2>svn commit -mm user2_branch
Sending        user2_branch
Adding         user2_branch\file2.txt

Committed revision 5.

E:\Colspace\sandbox2>svn update user1_branch
Updating 'user1_branch':
A    user1_branch\file2.txt
U   user1_branch
Updated to revision 5.

E:\Colspace\sandbox2>svn propget svn:mergeinfo user1_branch


On 12.03.2014 21:24, Jeb Wilson wrote:
> Hello all,
> Apologies if this has already been reported, but it's a difficult one to search for.
This came through from TortoiseSVN 1.8.5.
> Here's the basic way to reproduce:
> User #1 merges from A -> B and commits.
> User #2 merges SOMETHING ELSE from A->B but doesn't update first to get User #1's
> User #2 commits, and SVN allows the commit. After reviewing the resulting mergeinfo,
User #1's mergeinfo is overwritten, and the merge info from User #1 is lost.
> I've reproduced this several times with TortoiseSVN 1.8.5. Note, we're using 2.5.16 version
of VisualSVN server.
> My opinion is SVN should reject User #2's commit, and inform them they have an out-of-date
working copy and it should force them to update before committing their merge changes.
> When I downgrade to 1.8.3, the proper "out of date" warning comes up and forces an update.
Thus, it must have been something that was introduced as of 1.8.4.
> FYI, another user has reported this issue here:

I can't reproduce this with either 1.8.5 or 1.8.8, with the attached
script; both give the same output (see below). If this is indeed a bug,
and not pilot error, it would appear to be specific to TortoiseSVN, not

-- Brane

brane@zulu:/tmp/test$ ~/
+ svnadmin create repo
+ svn checkout file:///tmp/test/repo<file:///\\tmp\test\repo> structure
Checked out revision 0.
+ svn mkdir structure/trunk
A         structure/trunk
+ echo a
+ echo b
+ svn add structure/trunk/a structure/trunk/b
A         structure/trunk/a
A         structure/trunk/b
+ svn commit -mm structure
Adding         structure/trunk
Adding         structure/trunk/a
Adding         structure/trunk/b
Transmitting file data ..
Committed revision 1.
+ rm -fr structure
+ svn copy -mm file:///tmp/test/repo/trunk<file:///\\tmp\test\repo\trunk> file:///tmp/test/repo/branch<file:///\\tmp\test\repo\branch>

Committed revision 2.
+ svn checkout file:///tmp/test/repo/trunk<file:///\\tmp\test\repo\trunk> user1
A    user1/a
A    user1/b
Checked out revision 2.
+ echo aa
+ svn commit -mm user1
Sending        user1/a
Transmitting file data .
Committed revision 3.
+ svn checkout file:///tmp/test/repo/trunk<file:///\\tmp\test\repo\trunk> user2
A    user2/a
A    user2/b
Checked out revision 3.
+ echo bb
+ svn commit -mm user2
Sending        user2/b
Transmitting file data .
Committed revision 4.
+ svn switch file:///tmp/test/repo/branch<file:///\\tmp\test\repo\branch> user1
U    user1/a
Updated to revision 4.
+ svn switch file:///tmp/test/repo/branch<file:///\\tmp\test\repo\branch> user2
U    user2/b
U    user2/a
Updated to revision 4.
+ svn merge -c3 file:///tmp/test/repo/trunk<file:///\\tmp\test\repo\trunk> user1
--- Merging r3 into 'user1':
U    user1/a
--- Recording mergeinfo for merge of r3 into 'user1':
U   user1
+ svn commit -mm user1
Sending        user1
Sending        user1/a
Transmitting file data .
Committed revision 5.
+ svn merge -c4 file:///tmp/test/repo/trunk<file:///\\tmp\test\repo\trunk> user2
--- Merging r4 into 'user2':
U    user2/b
--- Recording mergeinfo for merge of r4 into 'user2':
U   user2
+ svn commit -mm user2
Sending        user2
svn: E155011: Commit failed (details follow):
svn: E155011: Directory '/private/tmp/test/user2' is out of date
svn: E160028: Directory '/branch' is out of date

Branko ─îibej | Director of Subversion
WANdisco // Non-Stop Data

View raw message