如何使用git同时处理几个不同版本的文件?

时间:2012-05-19 13:54:24

标签: git branch git-branch

我目前正在开发一个在MATLAB / SPM8下运行的神经影像工具箱,我的存储库中的大多数程序文件都是MATLAB *.m文件。我有不同的功能分支和一个analysis分支,我用它来使用当前版本进行持续分析。与此同时,我正在开发master中的代码和功能分支,然后不断将其合并到master分支。

现在的问题是,我在analysis分支中运行的分析确实需要花费很多时间(甚至几天),在此期间我无法git checkout master或{ {1}}。这严重限制了我的生产力。

所以,因为不可能同时打开几个分支, 我正在考虑将git checkout new-feature分支从开发存储库移到自己的存储库中。问题是,如果我analysis基于当前git init分支的新存储库,是否有办法以某种方式analysis时不时地从当前git merge分支(开发存储库)能够在新的分析存储库中使用我的开发存储库的新开发代码吗?

2 个答案:

答案 0 :(得分:8)

如果您git clone将现有存储库放入新存储库,则可以{1}}或git push从一个到另一个存储库以匹配您已更改的引用(分支);不涉及合并。存储库的内容将自动硬链接以节省磁盘空间。

如果您对git fetch--mirror使用git clone选项,则会省略远程跟踪分支,并且两者都具有相同的分支,这更简单,更对称,但较少使用git的常规用法。为了最大限度地“遵循教程”的简单性,而是安排第三个“中央”存储库(应该创建git push),这两个工作存储库都是克隆的。

不应该需要合并(除了“快进合并”之外并非真正合并,而是将旧分支头替换为新的分支头),因为您正在处理相同的分支;你只有两份副本。当您的分析完成并且您能够更新分析分支时,只需在--baregit 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