当主干/分支埋在子树中时,如何进行Subversion分支?

3

我被分配了一个SVN代码库的工作,其组织方式如下:

REPO_ROOT
  |-AAA
  |-BBB
  |-DDD
      |-D1
      |-D2
      |-software
          |-branches
          |-tags
          |-trunk
  |-YYY
  |-ZZZ

我主要在处理^/DDD/software/trunk。现在想创建一个分支来修复^/DDD/software/branches/error-fixing中的一些错误。

首先,我创建并提交了^/DDD/software/branches/error-fixing目录,该目录之前不存在。然后,我使用以下命令从trunk创建了一个分支:$ svn copy svn+ssh://xxx@yyy.zzz/REPO_ROOT/DDD/software/trunk svn+ssh://xxx@yyy.zzz/REPO_ROOT/DDD/software/branches/error-fixing -m "从trunk到error-fixing分支"

现在我需要切换到正确的分支。我在trunk目录内,并使用以下命令$ svn switch "^/DDD/software/branches/error-fixing" .但是这个命令失败了,提示:svn: E195012: Path '.' does not share common version control ancestry with the requested switch location.

我该如何切换到该分支?(这是我第一次这样做,所以可能做错了什么。)

2个回答

5
问题出在分支的创建方式上。我首先创建了一个错误目录,然后再进行svn复制。这导致trunk目录被复制到error-fixing中,而不仅仅是它的内容,导致结果为^/DDD/software/branches/error-fixing/trunk/<files>而不是^/DDD/software/branches/error-fixing/<files>。在这里发现了微妙的差别(来源)。这就是为什么trunk和error-fixing没有共同的祖先,内容是不同的。

一旦我svn删除了error-fixing,并在之前没有创建error-fixing,svn复制就可以正常工作了。


1
当您在服务器上创建分支时,实际上是将主干的内容复制到了分支中。
实际上,在切换时会在后台进行合并,而不仅仅是某种指针。由于分支是新的,因此它没有历史记录,因为没有提交。
如果我没有错的话,您需要在本地检出分支,进行修改,然后提交,然后再切换到该分支(在提交创建历史记录之后)。
为了进行快速测试,可以检出、进行小修改、提交,然后切换。但是,我不建议经常切换,特别是到分支!您应该将分支合并到主干中,测试主干,然后创建一个标签,并将服务器切换到标签上,而不是分支上。

我找到了问题所在,但还是谢谢你!(已在答案中发布了更正。) - Daniel
如果我已经检出了主干,现在我想要一个分支,我应该如何检出它?我需要两个目录吗? - Line

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接