由于我们的SVN存储库管理不善,我们最终创建了一个名为Stable的分支,其中包含我们代码的稳定版本(该分支实际上是从最后一个版本的标记开始的,而不是主干)。 / p>
基本上,我们的新程序员所做的一些改变已经“感染”了主干,他们并不知道他们在做什么。
我想要实现的是将稳定分支作为主干,从分支发生后丢弃所有这些更改,但是我需要确保保留所有历史预分支。
分支是否包含分支发生前的所有历史记录? (在这种情况下,我想我可以移动分支成为主干?)
我能找到的所有教程都谈到合并......但我对此感到紧张,因为如果我的理解是正确的,如果主干中的变化没有发生冲突,我会在稳定的构建中得到这些
所以问题是这种情况的最佳选择是什么?
提前感谢您的意见!
答案 0 :(得分:2)
是的,分支包含复制之前的所有历史记录...因此您可以删除当前的主干,并将分支复制或重命名为主干,您应该好好去。
来自svn log --help
:
每条日志消息只打印一次,即使显式请求了多个受影响的路径。默认情况下,日志遵循复制历史。使用--stop-on-copy可以禁用此行为,这对于确定分支点非常有用。
答案 1 :(得分:2)
在您的情况下,我建议使用合并回滚您的主干上的更改。您可以使用trunk作为合并的源和目标,以与merge命令相反的顺序指定修订号。例如,在主干的工作目录中(请注意,您可能更喜欢使用存储库URL):
svn merge .@Y .@X .
将回滚从修订版X到修订版Y的更改。另请注意,svn merge命令具有--dry-run选项,以便您可以在实际进行任何更改之前验证将执行的操作。
请记住,您使用版本控制的原因之一是,您可以保留更改的历史记录,并在必要时将其回滚。即使你现在不这么认为,主干上的错误提交也许是你将来想要提及的内容。
答案 2 :(得分:1)
有几个选择:
您可以在SVN中move您的目录,就像(几乎)您正在组织本地目录一样。所有的历史将被保留。 (当然包括你的'移动')
如果您想将存储库置于历史记录中不会出现此错误的状态,则可以使用administration features删除不需要的更改集并将其手动添加到适当的地方。这可能是单调乏味的,如果在其他地方引用它们,您可能需要查看修订号。
与此同时,我建议与团队决定strategy,以避免混淆。
答案 3 :(得分:0)
我很喜欢你描述这个程序员变化的方式。所以,如果:
您可以尝试非常小心来执行svnadmin dump -rX:Y
转储回购直到受感染的修订版,删除当前回购,并使用< em>未被感染一个。