svn - 结合颠覆文件历史

标签 svn tortoisesvn

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

这可能吗?我尝试过的每件事都让我了解了原件或副本的历史,但从未将两者结合起来。创建副本后原始文件没有任何变化。

最佳答案

这是可能的。然而,这是一些工作,并不完美。

假设只有一个文件被移动,并且它发生在版本 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) 显示。

关于svn - 结合颠覆文件历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18278084/

相关文章:

svn: E175005: 路径已经存在

svn - 禁止访问'/SVN/[repo name]/!svn/me'

svn - 我可以在 Subversion 中关闭自动合并吗?

git - smartgit:执行命令失败:主干已过时

python - SVN:Python 预提交脚本总是失败

svn - 乌龟 SVN - 错误 :Delta Source Ended Unexpectedly

SVN:使用 TortoiseSVN 更新工作副本以排除外部对象?

windows - 如何使用 svn 比较两个文件夹并生成报告

c# - svn 的预提交 Hook 修改要在 c# 中提交的文件

svn - 可以从我的 SVN 存储库中完全删除文件吗?