Dear fans of move tracking, I heartily invite you to help by playing with 'svnmover'. Can you have a go and see what it can do? It's quite fun to play with (in a nerdy way :-)
To get it, build the 'move-tracking-2' branch and look in 'subversion/svnmover/svnmover' -- it's a sibling to 'svn' and 'svnmucc'. It's fairly easy to pick up as you go along. There's a transcript below, as an example. You can also see in the IRC history [1] where I guided Brane through playing with it for the first time. You can try - doing renames/moves (using 'mv PATH1 PATH2') - merging those changes onto another branch ('merge FROM TO YCA') - visualize what's happening ('branches PATH', 'ls PATH', 'ls-br-r') - type 'help' to see usage message You should find that it copes perfectly with renames inside renames, and so on. Do please share any thoughts or questions you have -- * about the model * do you grok the way moves work in svnmover? * any new feature 'svnmover' should have to help with experimenting? I believe we can build a move-tracking design for Subversion. This stage is not trying to give the final answer, it is squarely aimed at exploring and understanding how it could and should work. So I need *your* input, please, if you can spare some thought cycles and experimentation cycles. Here's an example transcript. [[[ $ svnadmin create repo; REPO=file://$PWD/repo $ svnmover -U $REPO svnmover> ls . e0 . svnmover> mkbranch trunk mkdir branches A trunk (branch ^.2) A branches Committed r1: --- diff branch ^, family 0, at / : / A e2 e0/trunk (branch ^.2) A e3 e0/branches --- added branch ^.2, family 1, at /trunk svnmover> mkdir trunk/A mkdir trunk/A/D1 mkdir trunk/A/D2 A trunk/A A trunk/A/D1 A trunk/A/D2 Committed r2: --- diff branch ^.2, family 1, at /trunk : /trunk A e101 e100/A A e102 e101/D1 A e103 e101/D2 svnmover> branch trunk branches/br1 A+ branches/br1 (branch ^.4) Committed r3: --- diff branch ^, family 0, at / : / A e4 e3/br1 (branch ^.4) --- added branch ^.4, family 1, at /branches/br1 svnmover> branches . branches in family 0: ^ / svnmover> branches trunk branches in family 1: ^.2 /trunk ^.4 /branches/br1 svnmover> mv branches/br1/A/D1 branches/br1/D1renamed V branches/br1/D1renamed (from branches/br1/A/D1) Committed r4: --- diff branch ^.4, family 1, at /branches/br1 : /branches/br1 Mvr e102 e100/D1renamed from e101/D1 svnmover> mkdir trunk/A/D1/new-child A trunk/A/D1/new-child Committed r5: --- diff branch ^.2, family 1, at /trunk : /trunk A e104 e102/new-child svnmover> merge trunk branches/br1 trunk@2 A e104 new-child Committed r6: --- diff branch ^.4, family 1, at /branches/br1 : /branches/br1 A e104 e102/new-child svnmover> ls branches/br1 e100 . e101 A e102 D1renamed e103 A/D2 e104 D1renamed/new-child svnmover> merge branches/br1 trunk trunk@2 M/V e102 D1renamed M/V e104 new-child Committed r7: --- diff branch ^.2, family 1, at /trunk : /trunk Mvr e102 e100/D1renamed from e101/D1 svnmover> ls trunk e100 . e101 A e102 D1renamed e103 A/D2 e104 D1renamed/new-child svnmover> ]]] - Julian [1] <http://colabti.org/irclogger/irclogger_log/svn-dev?date=2015-03-05#l113>