我在GitHub中获得了这个非常大的Git回购。这个回购包括几个独立的项目,我想分解成他们自己的独立回购,并继续在那里开发。
ridiculously-large.git
├───Project1
├───Project2
├───...
└───Project1000
目前,我对Project2
感兴趣。我想"克隆" Project2
仅及其历史记录,只有一个专门用于它的新回购Project2.git
,并且ridiculously-large.git
仅用于历史目的。
到目前为止,我采用以下方法取得了一些成功:
首先,在GitHub中创建一个全新的仓库,Project2
没有提交历史记录(这似乎很重要,以避免那些"致命:拒绝合并不相关的历史记录......" )并克隆它。
git clone https://github.com/me/Project2.git
因此,我的本地仓库已经配置了默认远程origin
,指向新的GitHub仓库,这将特定于Project2
的进一步开发。
然后,在新的本地回购中:
git config core.sparseCheckout true
echo Project2/ >> .git/info/sparse-checkout
然后,我添加一个指向temp
的临时上游远程ridiculously-large.git
:
git remote add -f temp https://github.com/me/ridiculously-large.git
到目前为止一切顺利。仍然没有什么可以承诺的。
然后,将master
分支从temp
远程分支拉到新的work
本地分支:
git pull temp master:work
(我这样做是因为个人习惯:我从不在任何本地master
分支机构工作,无论是否为其配置了上游分支。)
这成功地实现了仅将与Project2
相关的来源拉入工作副本的目标。到目前为止一切顺利。
现在,在我将work
推送到新专用的远程origin
之后:
git checkout work
git push --set-upstream origin work
......我看到 THE WHOLE SHEBANG 被推到Project2
的新专用遥控器上,惨遭击败这项努力的全部目的。
提前感谢任何启蒙!