SVN Merge - 重新集成源和目标都不能成为存储库的根

时间:2012-07-17 23:38:20

标签: visual-studio-2010 svn tortoisesvn

我有一个包含多个项目的VS2010解决方案。文件夹结构如下所示:

C:\Dev\MyProduct
    MyProduct.sln
    UI
        UI.csproj
        SomeFile.cs
    Model
        Model.csproj
        SomeModel.cs

我创建了代码的第一个生产版本的分支。事实证明我必须在该分支中进行一些修复,现在想要将该分支重新集成到主干中。我正在使用TortoiseSVN来做到这一点(我也尝试过类似结果的AnkhSVN。)

如果我选择文件夹

  

C:\开发\ myProduct的

右键单击并选择 TortoiseSVN / Merge 我被引导通过一个向导,允许我选择重新整合分支,输入我的分支的URL,然后运行合并。这导致

  

重新整合来源和目标都不能成为存储库的根

如果我用

重复相同的步骤
  

C:\开发\ myProduct的\模型

合并成功。我想错误信息告诉我,我根本无法在根级别那样做。

问题

  1. 我是否有任何选项给定当前结构完全合并分支,除了选择每个项目的文件夹(示例中有多于2个)并重复该过程,然后重复每个文件的过程在C:\Dev\MyProduct下?
  2. 以这种方式构建SVN是不可取的?如果没有,我应该如何构建事物,以便每个产品都有一个存储库?

1 个答案:

答案 0 :(得分:2)

您可能希望以不同方式构建存储库。有两种方法可以做到这一点:

/project1/trunk
/project1/branches
/project1/tags
/project2/trunk
/project2/branches
/project2/tags
...

/trunk/project1
/trunk/project2
/branches
/tags

您选择哪一个取决于您是要分支和合并每个项目(第一个选项),还是将所有项目合并在一起(第二个选项)。

如果需要将存储库根目录中的现有项目文件移动到新的/ trunk目录中,则需要执行以下操作:

cd /path/to/repo
files=`eval "echo *"`
mkdir trunk branches tags
svn add trunk branches tags
svn commit -m "adding the proper subdirectories"
svn mv `echo $files | sed 's/^/^\//g' | sed 's/ / ^\//g'` ^/trunk/ -m "moving project files into trunk"
svn up

如果您手动执行此操作,那么“svn mv”行将如下所示:

svn mv ^/dir1 ^/dir2 ^/file1 ^/file2 ^/trunk/ -m "moving project files into trunk"