Svn 我可以将两个不同subversion项目的标记、分支和主干合并到一个新的父项目下吗?
我有这样一个存储库:Svn 我可以将两个不同subversion项目的标记、分支和主干合并到一个新的父项目下吗?,svn,merge,branch,Svn,Merge,Branch,我有这样一个存储库: 存储库根 项目A1 树干 A1材料 标签 分支机构 项目A2 树干 A2材料 标签 分支机构 我希望将这两个项目合并到一个父目录下,保留历史记录、标记和分支,同时避免在本地签出中每个项目下出现trunk/tags/branchs子目录。因此,新布局将如下所示: 存储库根 A-prime项目 树干 项目A1 A1材料 项目A2 A2材料 标签 分支机构 这可能吗?我很怀疑,因为标记相对于它们引用的文件向上移动了一个级别 我可以仅
- 存储库根
- 项目A1
- 树干
- A1材料
- 标签
- 分支机构
- 树干
- 项目A2
- 树干
- A2材料
- 标签
- 分支机构
- 树干
- 项目A1
- 存储库根
- A-prime项目
- 树干
- 项目A1
- A1材料
- 项目A2
- A2材料
- 项目A1
- 标签
- 分支机构
- 树干
- A-prime项目
svn move
命令合并主干(分支也是如此):
但这不会保留标签。我似乎可以手动创建新的标记目录,并将每个子项目的标记一次移动一个,但这似乎很难看,而且我不确定我是否可以如此轻松地移动标记-Subversion是否以某种方式对它们进行了特殊处理?您可以谨慎地尝试。一些对你有用的链接(你忘了做自己的家庭作业)
svn-merge-repos.pl -t ./proj ./foo/trunk:proj1 ./bla/trunk:proj2
最后,将各个转储文件加载到各自的位置
在新存储库中
“合并SVN存储库”中的示例
将存储库“foo”和“bla”的“trunk”合并为子目录
存储库“proj”中的“proj1”和“proj2”
您可以谨慎地尝试。一些对你有用的链接(你忘了做自己的家庭作业)
svn-merge-repos.pl -t ./proj ./foo/trunk:proj1 ./bla/trunk:proj2
最后,将各个转储文件加载到各自的位置
在新存储库中
“合并SVN存储库”中的示例
将存储库“foo”和“bla”的“trunk”合并为子目录
存储库“proj”中的“proj1”和“proj2”
当我正确理解您的问题时,您有一个存储库,其中包含通常的多项目布局。现在,您需要将该存储库重新构造为不同的布局 这当然是可能的。原因很简单:
- 标记和分支中的所有内容都只是主干的(Subversion)副本。SVN副本很便宜,因为它只复制元数据。例如,分支rel1是主干4711版本的副本。此结构永远不会更改,因此您的分支和标记是有效的
- 当您仅使用subversion命令重新构造subversion存储库时,subversion确保您不会丢失任何信息。您肯定知道项目“A1”的当前内容,并且您知道所有这些内容的历史
- 您不进行真正的合并,只在存储库中移动内容
svn:externals
时,这些内容会转到当前版本(head)。您必须更改所有这些定义,因为您的结构已更改。如果分支或标记目录中的一些顶级目录(以前是不同的)具有相同的名称,那么您必须知道该怎么做,因此没有区别
您可以使用这样的结构(类似于主干布局):
所以去做吧,如果出了什么问题,就从你之前做过的转储存储库中重新创建你的存储库。当我正确理解你的问题时,你有一个存储库,其中包含通常的多项目布局。现在,您需要将该存储库重新构造为不同的布局 这当然是可能的。原因很简单:
- 标记和分支中的所有内容都只是主干的(Subversion)副本。SVN副本很便宜,因为它只复制元数据。例如,分支rel1是主干4711版本的副本。此结构永远不会更改,因此您的分支和标记是有效的
- 当您仅使用subversion命令重新构造subversion存储库时,subversion确保您不会丢失任何信息。您肯定知道项目“A1”的当前内容,并且您知道所有这些内容的历史
- 您不进行真正的合并,只在存储库中移动内容
svn:externals
时,这些会转到当前位置
/tags
/projectA1
/rel1
/rel2
/projectA2
/rel1
/rel2