相关疑难解决方法(0)

将大型仓库拆分为多个子仓库并保留历史记录(Mercurial)

我们有一大堆代码,包含SVN中一个目录中的几个共享项目,解决方案文件等.我们正在迁移到Mercurial.我想借此机会将我们的代码重新组织到几个存储库中,以便克隆分支的开销更少.我已经成功地将我们的回购从SVN转换为Mercurial,同时保留了历史.我的问题:如何在保留历史记录的同时将所有不同的项目分解为单独的存储库?

以下是我们的单个存储库(OurPlatform)目前的示例:

/OurPlatform
---- Core
---- Core.Tests
---- Database
---- Database.Tests
---- CMS
---- CMS.Tests
---- Product1.Domain
---- Product1.Stresstester
---- Product1.Web
---- Product1.Web.Tests
---- Product2.Domain
---- Product2.Stresstester
---- Product2.Web
---- Product2.Web.Tests
==== Product1.sln
==== Product2.sln
Run Code Online (Sandbox Code Playgroud)

所有这些都是包含VS项目的文件夹,解决方案文件除外.Product1.sln和Product2.sln都引用了所有其他项目.理想情况下,我想采取每个文件夹,并将它们转换为单独的Hg回购,并为每个项目添加新的回购(它们将充当父回购).然后,如果有人打算使用Product1,他们将克隆Product1 repo,其中包含Product1.sln和Subrepo对ReferenceAssemblies,Core,Core.Tests,Database,Database.Tests,CMS和CMS.Tests的引用.

因此,通过项目目录中的hg init'ing很容易做到这一点.但这可以在保存历史的同时完成吗?或者有更好的方法来安排这个吗?

编辑::::

感谢Ry4an的回答,我完成了我的目标.我想分享我在这里为别人做的事情.

由于我们有很多单独的项目,我编写了一个小的bash脚本来自动创建文件映射并创建最终的bat脚本来实际进行转换.从答案中不完全明显的是,convert命令需要为每个文件映射运行一次,以便为每个项目生成一个单独的存储库.此脚本将放在您先前转换的svn工作副本上方的目录中.我使用了工作副本,因为它的文件结构最符合我想要的最终新的hg repos.

#!/bin/bash

# this requires you to be in: /path/to/svn/working/copy/, and issue: ../filemaplister.sh ./

for filename in *
do
  extension=${filename##*.} #$filename|awk -F . '{print $NF}'
  if [ "$extension" == "sln" -o "$extension" == "suo" -o "$extension" == "vsmdi" …
Run Code Online (Sandbox Code Playgroud)

svn mercurial visual-studio subrepos

29
推荐指数
1
解决办法
4140
查看次数

标签 统计

mercurial ×1

subrepos ×1

svn ×1

visual-studio ×1