trunk/branches 埋在子树中时的颠覆分支

Subversion branching when trunk/branches buried in subtree

我的任务是按如下方式组织 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 目录,该目录不存在。然后我使用命令创建了一个主干分支:$ 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.

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

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

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

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

为了快速测试,签出,进行小的修改,提交然后切换。艰难,我不建议经常切换,尤其是分支机构!您应该将分支合并到主干中,测试主干,然后创建标签并在标签上切换服务器,而不是在分支上。

问题出在创建分支的方式上。我首先创建了错误目录,然后进行了 svn 复制。这会导致 trunk 目录被复制到错误修复中,而不仅仅是其内容,从而导致 ^/DDD/software/branches/error-fixing/trunk/<files> 而不是 ^/DDD/software/branches/error-fixing/<files>。发现细微差别 here。所以trunk和error-fixing不是同源的,内容不同

一旦我删除了 svn-removed 错误修复并执行了 svn 复制而之前没有创建错误修复,svn 开关工作正常。