10

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

现在的问题是,我在analysis分支中运行的分析确实需要很多时间(甚至几天),而在那段时间里我无法git checkout mastergit checkout new-feature. 这严重限制了我的工作效率。

因此,由于不可能同时保持多个分支打开,我正在考虑将analysis分支从开发存储库移到它自己的存储库。问题是,如果我git init是基于当前分支的新存储库,有没有办法不时地从(开发存储库的)当前分支analysis以某种方式在新的开发存储库中使用我的开发存储库的新开发代码分析库?git mergemaster

4

2 回答 2

9

如果您git clone将现有存储库转换为新存储库,那么您可以git pushgit fetch从一个到另一个来匹配您已更改的参考(分支);不涉及合并。存储库的内容将自动硬链接以节省磁盘空间。

如果您使用and--mirror选项,您将省略远程跟踪分支,只在两者中拥有相同的分支,这更简单、更对称,但不像 git 的常规使用。为了最大限度地“遵循教程”的简单性,请安排第三个“中央”存储库(应该创建),您的两个工作存储库都是克隆的。git clonegit push--bare

不需要合并(除了不是真正合并的“快进合并”,而是用它的新后代替换旧的分支头),因为您正在处理相同的分支;你只有两个副本。当您的分析完成并且您可以更新分析分支时,就git merge --ff-only masteranalysis; 您可以在任何方便的存储库中执行此操作,但不要忘记将更改与git push other-repository.


另一个选项(从 Git 2.5 版开始)是git worktree命令,它允许多个独立的工作树,您可以在其中git checkout独立地等。这个和上面的克隆选项的区别在于这里只有一组分支

但是(从 2.8 版开始)这仍然被认为是一个“实验性”功能,我没有亲自使用它来评论它的可靠性和实用性。

于 2012-05-19T14:08:55.837 回答
2

作为 Kevin Reid 解释的克隆 repo 的替代方法,您也可以使用git-new-workdir为您的 repo 创建第二个工作副本。这样,两个工作副本将始终自动看到相同的分支,因为它们共享一个 git 存储库。

克隆 repo 的优点是不需要任何手动同步/合并。当您在 workdir A 中提交时,该提交将在 workdir B 中可见(例如git log)。

唯一需要注意的是:当您更改存储库(提交、变基、重置分支等)时,您不应该在另一个工作目录中签出相同的分支 - 否则 git 会有点混乱(参见git-new-workdir: Commit在工作树 A 中导致树 B 的虚假变化 )。

请参阅:git 同时在两个分支上工作

于 2012-06-29T10:42:51.527 回答