如果合并到分支 B 后分支 A 被删除怎么办?

What if branch A is removed after merge into branch B?

直截了当...

  1. I have branch A and two other branches B and C which were created based on branch A.
  2. I generally do changes on branch A and then manually merge changes on B and C if required.
  3. But what would happen if I do SVN Merge (A -> B) for few revisions and then branch A get deleted (may be a case A is no longer required after some time)?

如有任何帮助,我们将不胜感激。

合并后删除分支怎么办?没有什么。合并已经发生,所以合并的历史仍然存在。 svn:mergeinfo 属性 甚至列出了被删除的分支。

如果您尝试合并已删除的分支会怎样?没有什么。你不能。 Subversion 会告诉你分支不再存在。

但是,Subversion 中的任何内容都不会被删除。您始终可以撤消操作——甚至是删除分支。假设您删除了修订版 1001 中的 foo 分支,您可以使用以下方法恢复它:

$ svn cp -r1000 $REPO/branches/foo@1000 $REPO/branches

-r1000 表示您对存储库的修订版 1000 感兴趣。由于您删除了修订版 1001 中的修订版,因此您正在谈论删除之前 的修订版。

URL末尾的@1000叫做pinning。它是说您正在查看修订版 1000 的存储库的 结构 ,而该分支仍在附近。

或者,您可以在删除分支时撤消修订版 1001 的合并:

$ svn co --depth=immediates $RSVP/branches

immediates 会得到分支名称,但不会得到它们的内容。

$ cd branches
$ svn merge -c -1001

这将删除修订版 1001 中的更改,即删除分支时的修订版。请注意,svn cp 在 删除之前使用了修订版 ,而这在删除发生时使用了修订版。

重新创建分支后,您可以继续合并,就好像什么都没发生一样。

有一件事你不能做 svn add 来重新添加分支:

$ svn co --depth=immediates $RSVP/branches
$ cd branches
$ svn mkdir foo
$ ...   # Copying the files back in
$ svn add -R .

这将创建一个名为 foonew 分支,您的主干或分支之间没有共享历史记录。这些文件将具有相同的名称,但 Subversion 会将它们视为完全不同的文件。尝试合并只会导致心痛和情绪困扰。