Git 拆分和清除
Git split and purge
我知道这很不寻常,但是我的一个 git 存储库(充当收集所有存储库)变得太大了,我想将它一分为二,分为 repoA
和 repoB
。
我在“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
我试了一下,只更新了fetch
url,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
中删除这些文件夹)
我知道这很不寻常,但是我的一个 git 存储库(充当收集所有存储库)变得太大了,我想将它一分为二,分为 repoA
和 repoB
。
我在“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
我试了一下,只更新了fetch
url,push
还是指向旧的。我缺少什么?
So in
repoB
, how to removesub1/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
中删除这些文件夹)