当主干/分支埋没在子树中时的Subversion分支

时间:2015-09-04 07:57:04

标签: svn branch

我的任务是按照以下方式组织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 "Branching from trunk to 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 个答案:

答案 0 :(得分:4)

问题来自分支的创建方式。我首先创建了错误目录,然后执行了svn副本。这会导致将trunk目录复制到错误修复中,而不仅仅是其内容,从而导致^/DDD/software/branches/error-fixing/trunk/<files>而不是^/DDD/software/branches/error-fixing/<files>。找出了微妙的差异here。这就是为什么主干和错误修复没有共同的祖先,内容是不同的。

一旦我svn删除了错误修复并在没有先前创建错误修复的情况下执行了svn复制,svn开关工作正常。

答案 1 :(得分:1)

在服务器上创建分支时,您刚刚将主干的内容复制到分支机构。

实际上,当你切换时,在后台进行合并,它不仅仅是某种指针。由于分支是新的,它没有历史记录,因为没有对它进行提交。

如果我没有弄错,你需要在本地签出分支,进行修改,然后提交然后切换到分支(在提交创建历史记录之后)。

对于快速测试,结帐,做了一个小修改,提交然后切换。很难,我不建议经常切换,尤其是分支机构!你应该在trunk中合并分支,测试trunk,然后创建一个标签并在标签上切换服务器,永远不要在分支上。