2

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

那可能吗?我尝试过的一切都给了我原始或副本的历史,从来没有两者结合。创建副本后,原始文件没有任何更改。

4

1 回答 1

3

有可能的。但是,这是一些工作,并不完美。

假设只移动了一个文件,并且它发生在 rev 42 中。在它发生之前创建一个功能分支:

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

转到功能分支,合并错误的 rev 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)。

于 2013-08-17T09:53:42.403 回答