Git 拆分和清除

Git split and purge

我知道这很不寻常,但是我的一个 git 存储库(充当收集所有存储库)变得太大了,我想将它一分为二,分为 repoArepoB

我在“Forking a sub directory of a repository on GitHub and making it part of my own repo”中找到了一种拆分方法,但是,这只是关于拆分的,我希望历史也被拆分,所以 repoA 只会包含 repoA 而不是 repoB 的历史记录,反之亦然。否则,我将获得两个回购协议,但由于它保留了所有历史记录,因此大小会增加一倍。

更新:

感谢@ElpieKay 指出查看 git filter-branch(而不是我在使用 "git purge" 搜索时发现的 git clean),我发现了这个:

https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/

这正是我要找的。但是,还有一个问题 -- 如何从 repoB 中删除 repoA 内容?即拆分repoA时,我只需要做,

git filter-branch --prune-empty --subdirectory-filter sub1/sub2/sub3 master 

所以在 repoB 中,如何 删除 sub1/sub2/sub3 同时保留 其他所有内容

此外,上面文档中的这个命令,

 git remote set-url origin https://github.com/USERNAME/NEW-REPOSITORY-NAME.git

我试了一下,只更新了fetchurl,push还是指向旧的。我缺少什么?

So in repoB, how to remove sub1/sub2/sub3 while keep everything else?

你做一个索引过滤器:

cd repoB
git filter-branch --prune-empty --index-filter \
  'git rm -r -f -q --ignore-unmatch --cached sub1/sub2/sub3' --tag-name-filter cat -- --all

这将从 repoA 中删除 sub1/sub2/sub3

您将需要 git push --force 来更新您的上游存储库(并从 repoA 中删除这些文件夹)