2015-09-04 53 views
1

主干/分支我一直在负责工作的组织为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://[email protected]/REPO_ROOT/DDD/software/trunk svn+ssh://[email protected]/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

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

一旦我svn删除错误修复,并做了svn复制没有事先创建错误修复,svn开关工作正常。

1

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

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

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

对于快速测试,结帐,做了一个小的修改,提交然后切换。坚强,我不建议经常切换,特别是分支机构!您应该将分支合并到主干中,测试主干,然后创建标记并在标记上切换服务器,而不是在分支上。

+0

我发现问题出在哪里,不过谢谢你! (在回答中公布了更正。) – Daniel