我目前正在开发一个在MATLAB / SPM8下运行的神经影像工具箱,我的存储库中的大多数程序文件都是MATLAB *.m
文件。我有不同的功能分支和一个analysis
分支,我用它来使用当前版本进行持续分析。与此同时,我正在开发master
中的代码和功能分支,然后不断将其合并到master
分支。
现在的问题是,我在analysis
分支中运行的分析确实需要花费很多时间(甚至几天),在此期间我无法git checkout master
或{ {1}}。这严重限制了我的生产力。
所以,因为不可能同时打开几个分支,
我正在考虑将git checkout new-feature
分支从开发存储库移到自己的存储库中。问题是,如果我analysis
基于当前git init
分支的新存储库,是否有办法以某种方式analysis
时不时地从当前git merge
分支(开发存储库)能够在新的分析存储库中使用我的开发存储库的新开发代码吗?
答案 0 :(得分:8)
如果您git clone
将现有存储库放入新存储库,则可以{1}}或git push
从一个到另一个存储库以匹配您已更改的引用(分支);不涉及合并。存储库的内容将自动硬链接以节省磁盘空间。
如果您对git fetch
和--mirror
使用git clone
选项,则会省略远程跟踪分支,并且两者都具有相同的分支,这更简单,更对称,但较少使用git的常规用法。为了最大限度地“遵循教程”的简单性,而是安排第三个“中央”存储库(应该创建git push
),这两个工作存储库都是克隆的。
不应该需要合并(除了“快进合并”之外并非真正合并,而是将旧分支头替换为新的分支头),因为您正在处理相同的分支;你只有两份副本。当您的分析完成并且您能够更新分析分支时,只需在--bare
中git merge --ff-only master
;您可以在方便的存储库中执行此操作,但不要忘记将更改与analysis
同步。
另一个选项(因为Git版本2.5)是git worktree
命令,它允许多个独立的工作树,您可以独立地git push other-repository
等。这个和上面制作克隆的选项之间的区别在于,这里只有一组分支。
然而(从版本2.8开始)这仍然被认为是一个“实验性”功能,我并没有亲自用它来评论它的可靠性和实用性。
答案 1 :(得分:2)
作为Kevin Reid解释的克隆回购的替代方法,您也可以使用git-new-workdir
为您的回购创建第二个工作副本。这样,两个工作副本将始终自动看到相同的分支,因为它们共享一个git repo。
克隆回购的优势在于不需要任何手动同步/合并。在workdir A中提交的那一刻,提交将在workdir B中显示(例如git log
)。
唯一警告:当您更改存储库(提交,重新设置,重置分支等)时,您不应该在另一个workdir中检出相同的分支 - 否则git会有点混淆(请参阅{{3} })。
请参阅:git-new-workdir: Commit in working tree A causes bogus changes in tree B