我目前正在开发一个在 MATLAB/SPM8 下运行的我自己的神经成像工具箱,我存储库中的大多数程序文件都是 MATLAB *.m
文件。我有不同的功能分支和一个 analysis
分支,用于使用当前版本进行持续分析。同时,我在 master
和功能分支中开发代码,然后不断 merge 到 master
分支。
现在的问题是,我在 analysis
分支中运行的分析确实需要很多时间(甚至几天),并且在那段时间我无法 git checkout master
或 git checkout new-feature
。这严重限制了我的工作效率。
因此,由于不可能同时打开多个分支,
我正在考虑将 analysis
分支从开发存储库移到它自己的存储库中。问题是,如果我 git init
基于当前 analysis
分支的新存储库,是否有办法以某种方式 git merge
现在然后从当前的 master
分支(开发存储库)能够在新的分析存储库中使用我的开发存储库新开发的代码?
最佳答案
如果你git clone
你现有的仓库到一个新的仓库,然后你可以git push
或git fetch
从一个到另一个匹配您更改的引用(分支);不涉及 merge 。存储库的内容将自动硬链接(hard link)以节省磁盘空间。
如果您对 git clone
和 git push
使用 --mirror
选项,您将省略远程跟踪分支而只拥有两者中的相同分支,更简单、更对称,但不太像 git 的常规用法。为了最大程度地“遵循教程”的简单性,安排第三个“中央”存储库(应该创建 --bare
),您的两个工作存储库都是其克隆。
不需要 merge (除了“快进 merge ”,它不是真正的 merge ,而是用它的新后代替换旧的分支头),因为你在同一个分支上工作;你只有两份。当你的分析完成并且你能够更新分析分支时,只需 git merge --ff-only master
while in analysis
;您可以在任何方便的存储库中执行此操作,但不要忘记使用 git push other-repository
同步更改。
另一个选项(自 Git 版本 2.5 起)是 git worktree
命令,它允许多个独立的工作树,您可以在其中独立地 git checkout
等。这与上述制作克隆的选项之间的区别在于,这里只有一组分支。
但是(从 2.8 版开始)这仍然被认为是一个“实验性”功能,我个人还没有用它来评论它的可靠性和实用性。
关于git - 如何使用 git 同时处理多个不同版本的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665752/