合并subversion文件历史记录

时间:2013-08-16 16:31:45

标签: svn tortoisesvn

我们使用subversion(使用TortoiseSVN)来管理我们的源代码,通常它对我们很有用。然而,我们刚刚发现,大约一个月前,新员工意外地移动了一些文件并在没有保留历史的情况下提交了它们(即它们被添加为新的,而不是移动的)。我们一直在愉快地对文件进行更改,因为它们没有注意到它们的新位置。现在我想将这些文件移回原来的位置,同时保留我们在上个月所做的更改以及这些文件在意外移动之前的历史记录。

这可能吗?我尝试过的所有东西都给了我原版或副本的历史,从未结合过。创建副本后,原始文件没有任何更改。

1 个答案:

答案 0 :(得分: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)。