我有一个现有的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
我看过Detach (move) subdirectory into separate Git repository。这几乎可以满足我的需要。
我运行了这些命令:
$ 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
我说这几乎可行。提到的问题:
git gc --aggressive
步骤需要2个多小时。我有13个存储库需要从我当前的单个存储库中提取。我可以编写这个过程的脚本,但是会喜欢以任何方式输入以加快它的速度吗?git log
和gitk
向我展示了新foo-repo的预期提交。 gitX向我展示了预期的提交,以及与旧历史记录的断开连接的树。 foo-repo目录的大小比我预期的要大得多,所以我想剩下一些需要清理的东西。我不知道如何摆脱这些东西?我甚至需要在推之前摆脱它吗?答案 0 :(得分: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
选项使用filter-branch
。