Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将git存储库一分为二,但同时保留两者的git历史记录?_Git_Repository - Fatal编程技术网

如何将git存储库一分为二,但同时保留两者的git历史记录?

如何将git存储库一分为二,但同时保留两者的git历史记录?,git,repository,Git,Repository,我有一个完全杂乱无章的存储库,它是一个很好的候选库,可以进行拆分和分离,以减少CI构建时间。但是,我希望在这两个存储库中保留当前Git历史记录,同时通过将这些主要更改提交给它们,从这两个存储库中删除我不再需要的部分 我想知道是否有一个合适的方法来做到这一点。我考虑过从当前的存储库中分出两个新的存储库,其中每个存储库在删除它们不想保留的组件方面都在发生变化?这是一种方法吗?或者这里最好的做法是什么?以下是我将如何做到这一点。我将使用original repo、new-repo1和new-repo2

我有一个完全杂乱无章的存储库,它是一个很好的候选库,可以进行拆分和分离,以减少CI构建时间。但是,我希望在这两个存储库中保留当前Git历史记录,同时通过将这些主要更改提交给它们,从这两个存储库中删除我不再需要的部分


我想知道是否有一个合适的方法来做到这一点。我考虑过从当前的存储库中分出两个新的存储库,其中每个存储库在删除它们不想保留的组件方面都在发生变化?这是一种方法吗?或者这里最好的做法是什么?

以下是我将如何做到这一点。我将使用original repo、new-repo1和new-repo2作为存储库的替代:

cd ~
git clone original-repo new-repo1
cd new-repo1
git rm -r stuff-you-dont-want
git commit

cd ~
git clone original-repo new-repo2
cd new-repo2
git rm -r different-stuff-you-dont-want
git commit
现在,您将有两个不同的文件夹,其中包含两个不同的repo副本。然后,您可以更新源远程以指向不同的远程repo(例如,在Github上)

“从当前存储库中分叉两个新存储库…删除他们不想保留的组件”是的,这就是方法。
cd ~/new-repo1
git remote set-url origin new-repo1-url
git push -u origin master

cd ~/new-repo2
git remote set-url origin new-repo2-url
git push -u origin master