Git手术 - 将单个仓库拆分成多个仓库

3

我有一个现有的git存储库:

my-repo/
  .git/
  foo/
    foo-content-goes-here
  bar/
    bar-content-goes-here

我希望获得以下代码库结构:

my-foo-repo/
  .git/
  foo-content-goes-here

my-bar-repo/
  .git
  bar-content-goes-here

我看了一下将子目录移动到单独的Git仓库中,它几乎能满足我的需求。
我运行了以下命令:
$ cd path/to/my-repo/../
$ git clone --no-hardlinks my-repo foo-repo
$ cd foo-repo
$ git remote rm origin
$ git filter-branch --tag-name-filter cat --subdirectory-filter foo \
      --prune-empty -- --all
$ git reset --hard
$ git gc --aggressive
$ git prune

我说这个方法几乎可行。但是有以下问题:

  1. git gc --aggressive 步骤需要超过2个小时才能完成我的代码库。我有13个需要从当前单一仓库中提取的代码库。我可以编写脚本来自动化此过程,但希望得到任何加快速度的建议?
  2. git loggitk 显示了我新 foo-repo 的预期提交记录。gitX 显示了我预期的提交记录以及旧历史的不相关树。foo-repo 目录的大小比我预期的要大得多,因此可能还有一些需要清理的东西。我不确定如何清除这些内容?在推送之前是否需要清除它们?
1个回答

3
你可以尝试另一种方式:在原工作区的一个工作分支中过滤出你想要的目录,然后只将该分支推送到新存储库中。
$ cd /path/to/global-repo

$ git branch work-foo master
$ git filter-branch --tag-name-filter cat --subdirectory-filter foo \
      --prune-empty work-foo

$ cd /path/to
$ mkdir foo-repo
$ cd foo-repo
$ git init
$ git pull /path/to/global-repo work-foo

如果您采用这种方法,不建议使用--all选项来过滤分支。


JB,谢谢您的回复。我会在新的代码库副本中尝试这个方法,看看效果如何。 - jabley
@jabley 那么,进展如何? - JB.
我随后不久离开了公司,所以我不知道那个工作的进展如何。 - jabley
我的接受率就这样没了。嗯,祝你在新工作场所玩得开心 :-) - JB.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接