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

标签 git branch git-branch

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

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

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

最佳答案

如果你git clone你现有的仓库到一个新的仓库,然后你可以git pushgit fetch从一个到另一个匹配您更改的引用(分支);不涉及 merge 。存储库的内容将自动硬链接(hard link)以节省磁盘空间。

如果您对 git clonegit 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/

相关文章:

git - 如何在 merge 分支 fork 的地方提交

Git 最佳实践 : How do you tag a revision "TESTED" or "REJECTED"

强制更新后的 Git pull

css - heroku 和 django : server doesn't load staticfiles

c - 动态分支预测未命中计数 - 不正确

git - 了解本地 Git 分支的方式 "Track"远程分支

git - 如何在 Git 中创建公共(public)分支

git - 显示带有上次提交日期的 git 分支

git - 在创建一个我也需要查看最新更改的新分支后,从 master git pull 到我的本地 repo 是否安全?

git - 将两个 git 存储库 merge 为一个,保留(重命名)master 分支