SVN:如何将一个分支移到另一个分支的顶部?

时间:2010-01-19 10:25:46

标签: svn merge branch

由于我们的SVN存储库管理不善,我们最终创建了一个名为Stable的分支,其中包含我们代码的稳定版本(该分支实际上是从最后一个版本的标记开始的,而不是主干)。 / p>

基本上,我们的新程序员所做的一些改变已经“感染”了主干,他们并不知道他们在做什么。

我想要实现的是将稳定分支作为主干,从分支发生后丢弃所有这些更改,但是我需要确保保留所有历史预分支。

分支是否包含分支发生前的所有历史记录? (在这种情况下,我想我可以移动分支成为主干?)

我能找到的所有教程都谈到合并......但我对此感到紧张,因为如果我的理解是正确的,如果主干中的变化没有发生冲突,我会在稳定的构建中得到这些

所以问题是这种情况的最佳选择是什么?

提前感谢您的意见!

4 个答案:

答案 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)

有几个选择:

  1. 您可以在SVN中move您的目录,就像(几乎)您正在组织本地目录一样。所有的历史将被保留。 (当然包括你的'移动')

  2. 如果您想将存储库置于历史记录中不会出现此错误的状态,则可以使用administration features删除不需要的更改集并将其手动添加到适当的地方。这可能是单调乏味的,如果在其他地方引用它们,您可能需要查看修订号。

  3. 与此同时,我建议与团队决定strategy,以避免混淆。

答案 3 :(得分:0)

我很喜欢你描述这个程序员变化的方式。所以,如果:

  • 你真的很讨厌这个程序员,并希望抹去他所有的行为痕迹
  • 您拥有存储库的管理员权限

您可以尝试非常小心来执行svnadmin dump -rX:Y转储回购直到受感染的修订版,删除当前回购,并使用< em>未被感染一个。