我的任务是按照以下方式组织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.
如何切换到分支? (我第一次这样做,所以我可能做错了。)
答案 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,然后创建一个标签并在标签上切换服务器,永远不要在分支上。