2017-07-27 65 views
2

我知道这是不寻常的,但我的git repo之一,作为一个收集所有回购,变得太大,我想分成两个,分别为repoArepoBGit拆分和清除

我发现做分裂的“Forking a sub directory of a repository on GitHub and making it part of my own repo”的一种方式,但是,只讲述分裂,我想历史上被分割为好,这样repoA将只包含的repoA历史,而不是repoB和反之亦然。否则,我会得到两个回购券,但因为它保存的所有历史记录而使其规模增加一倍。

UPDATE:

由于@ElpieKay指出来看看git filter-branch(而不是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一个仍然指向旧的。我错过了什么?

+0

'git的过滤branch'两次。一个从历史中删除repoA,另一个删除repoB。将创建两个重写的历史记录。 – ElpieKay

+0

谢谢@ElpieKay,OP问题缩小了。 – xpt

回答

1

那么在repoB,如何删除sub1/sub2/sub3,同时保持一切?

你做一个指数过滤器:

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删除这些文件夹)

+0

谢谢@冯。我试过了,然后用'git log --stat'来检查一下。但是,其中仍有日志条目与'sub1/sub2/sub3'的更改有关,但日志输出中未列出相关文件。我们可以添加更多选项来彻底删除与'sub1/sub2/sub3'关联的所有git日志吗?谢谢。 – xpt

+0

@xpt你可以尝试相同的命令,但是使用'--prune-empty',即'git filter-branch --prune-empty ...' – VonC

+0

是的! '--prune-empty'就是诀窍!请更新答案,然后我会接受。 – xpt