$ svnadmin create repo $ REPO=file://$PWD/repo $ svn mkdir --parents $REPO/trunk/subdir -m mkdir Commited revision 1. $ svn co $REPO wc A wc/trunk A wc/trunk/subdir Checked out revision 1. $ cd wc $ echo -e "line1 orig\n\nline2 orig\n\nline3 orig\n" > trunk/subdir/test.txt $ svn add trunk/subdir/test.txt A trunk/subdir/test.txt $ svn ci -m orig Adding trunk/subdir/test.txt Transmitting file data . Committed revision 2. $ svn cp $REPO/trunk $REPO/branch -m createbranch Committed revision 3. $ svn stat -u * branch/subdir/test.txt * branch/subdir * branch * 1 . Status against revision: 3 $ svn up A branch A branch/subdir A branch/subdir/test.txt Updated to revision 3. $ echo -e "line1 orig\n\nline2 change1\n\nline3 orig\n" > trunk/subdir/test.txt $ svn ci -m change1 Sending trunk/subdir/test.txt Transmitting file data . Committed revision 4. $ cd branch $ svn merge $REPO/trunk --- Merging r3 through r4 into '.': U subdir/test.txt $ svn stat -u -v .. 4 4 pjbu ../trunk/subdir/test.txt 3 2 pjbu ../trunk/subdir 3 2 pjbu ../trunk 3 2 pjbu ../branch/subdir M 3 2 pjbu ../branch/subdir/test.txt M 3 3 pjbu ../branch 3 3 pjbu .. Status against revision: 4 $ svn ci -m merge1 Sending branch Sending branch/subdir/test.txt Transmitting file data . Committed revision 5. $ svn stat -u -v .. 4 4 pjbu ../trunk/subdir/test.txt 3 2 pjbu ../trunk/subdir 3 2 pjbu ../trunk 5 5 pjbu ../branch/subdir/test.txt 3 2 pjbu ../branch/subdir 5 5 pjbu ../branch 3 3 pjbu .. Status against revision: 5 $ cd .. $ echo -e "line1 orig\n\nline2 orig\n\nline3 change2\n" > trunk/subdir/test.txt $ svn ci -m change2 Sending trunk/subdir/test.txt Transmitting file data . Committed revision 6. ############################################## ## START : no svn update before merge -> bad ############################################## $ svn stat -u -v 6 6 pjbu trunk/subdir/test.txt 3 2 pjbu trunk/subdir 3 2 pjbu trunk 5 5 pjbu branch/subdir/test.txt 3 2 pjbu branch/subdir 5 5 pjbu branch 3 3 pjbu . Status against revision: 6 $ cd branch/subdir $ svn propget svn:mergeinfo . $ svn propget svn:mergeinfo .. /trunk:3-4 $ svn mergeinfo $REPO/trunk --show-revs eligible r1 r2 r4 r6 $ svn mergeinfo $REPO/trunk --show-revs merged $ svn mergeinfo $REPO/trunk/subdir --show-revs eligible r4 r6 $ svn mergeinfo $REPO/trunk/subdir --show-revs merged $ svn merge $REPO/trunk/subdir --- Merging r3 through r6 into '.': U test.txt $ cat test.txt line1 orig line2 change1 line3 change2 $ svn stat -u ../.. M 5 ../../branch/subdir/test.txt M 3 ../../branch/subdir Status against revision: 6 $ svn ci -m merge2 Sending subdir svn: Commit failed (details follow): svn: Directory '/branch/subdir' is out of date $ svn up At revision 6. $ svn stat -u ../.. M 6 ../../branch/subdir/test.txt M 6 ../../branch/subdir Status against revision: 6 $ svn ci -m merge2 Sending subdir Sending subdir/test.txt Transmitting file data . Committed revision 7. ############################################## ## STOP : no svn update before merge -> bad ############################################## ## START : svn update before merge -> good ############################################## $ svn up At revision 6. $ svn stat -u -v 6 6 pjbu trunk/subdir 6 6 pjbu trunk/subdir/test.txt 6 6 pjbu trunk 6 5 pjbu branch/subdir 6 5 pjbu branch/subdir/test.txt 6 5 pjbu branch 6 6 pjbu . Status against revision: 6 $ cd branch/subdir $ svn propget svn:mergeinfo . $ svn propget svn:mergeinfo .. /trunk:3-4 $ svn mergeinfo $REPO/trunk --show-revs eligible r1 r2 r4 r6 $ svn mergeinfo $REPO/trunk --show-revs merged $ svn mergeinfo $REPO/trunk/subdir --show-revs eligible r6 $ svn mergeinfo $REPO/trunk/subdir --show-revs merged r4 $ svn merge $REPO/trunk/subdir --- Merging r5 through r6 into '.': U test.txt $ cat test.txt line1 orig line2 orig line3 change2 $ svn stat -u ../.. M 6 ../../branch/subdir M 6 ../../branch/subdir/test.txt Status against revision: 6 $ svn ci -m merge2 Sending subdir Sending subdir/test.txt Transmitting file data . Committed revision 7.