合并Subversion文件历史记录

3
我们使用Subversion(带有TortoiseSVN)来管理我们的源代码,通常它对我们很有效。然而,我们刚刚发现,大约一个月前,新员工不小心移动了一些文件并提交了它们,但没有保留历史记录(即它们被添加为新文件,而非移动)。自那以后,我们一直在愉快地修改这些文件,而没有注意到它们的新位置。现在我想将这些文件移回它们原来的位置,同时保留我们在过去一个月内所做的更改以及这些文件在意外移动之前的历史记录。
这是否可能?我尝试过的所有方法都只给了我原始文件或复制文件的历史记录,从未结合两者。在创建副本后,原始文件没有进行任何更改。
1个回答

3

这是可能的。不过,需要一些工作,并且并不完美。

假设只有一个文件被移动了,而且是在第42次提交中发生的。创建一个功能分支,就在它发生之前:

svn cp ^/trunk@41 ^/branches/fix

前往功能分支,合并错误的版本42并在提交之前修复移动操作:

svn switch ^/branches/fix
svn merge -c 42 ^/trunk
svn revert foo.txt bar.txt
svn mv foo.txt bar.txt
svn commit

验证结果。下面的命令应该只显示属性svn:mergeinfo的更改:

svn diff ^/trunk@42 ^/branches/fix

同步合并来自主干的所有其他更改:

svn merge ^/trunk
svn commit

将分支重新合并到主干中:
svn switch ^/trunk
svn merge --reintegrate ^/branches/fix

文件bar.txt现在包含了整个历史记录。虽然自版本42以来的修订仅在使用选项-g (--use-merge-history)时才显示。


我终于有机会尝试了一下 - 这很麻烦,但是它起作用了。在Windows上,^需要被转义为^^(或其他方式),这点让我花了一些时间才弄清楚。 - Bobson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接