如何使用git同时处理多个不同版本的文件?
我目前正在开发我自己的神经成像工具箱,该工具箱在MATLAB/SPM8下运行,我的存储库中的大多数程序文件都是MATLAB如何使用git同时处理多个不同版本的文件?,git,branch,git-branch,Git,Branch,Git Branch,我目前正在开发我自己的神经成像工具箱,该工具箱在MATLAB/SPM8下运行,我的存储库中的大多数程序文件都是MATLAB*.m文件。我有不同的功能分支和一个analysis分支,用于使用当前版本进行持续分析。同时,我正在开发master和功能分支中的代码,然后不断地将这些分支合并到master分支中 现在的问题是,我在analysis分支中运行的分析确实需要很多时间(甚至几天),在这段时间内,我无法git checkout master或git checkout新功能。这严重限制了我的工作效率
*.m
文件。我有不同的功能分支和一个analysis
分支,用于使用当前版本进行持续分析。同时,我正在开发master
和功能分支中的代码,然后不断地将这些分支合并到master
分支中
现在的问题是,我在analysis
分支中运行的分析确实需要很多时间(甚至几天),在这段时间内,我无法git checkout master
或git checkout新功能。这严重限制了我的工作效率
因此,由于不可能同时打开多个分支,
我正在考虑将分析
分支从开发存储库转移到它自己的存储库。问题是,如果我基于当前的分析分支创建了一个新的git init
存储库,是否有办法时不时地从当前的master
分支(开发存储库)合并git
要能够在新的分析存储库中使用我的开发存储库的新开发代码?如果git克隆
现有存储库到新存储库中,则可以git push
或git fetch
从一个到另一个,以匹配已更改的引用(分支);不涉及合并。存储库的内容将自动硬链接以节省磁盘空间
如果您使用--mirror
选项来git clone
和git push
,您将省去远程跟踪分支,而只是在这两个分支中都有相同的分支,这更简单、更对称,但与git的常规用法相比要少一些。为了最大限度地简化“遵循教程”的操作,请安排第三个“中心”存储库(应该创建--bare
),这两个工作存储库都是它的克隆
不需要合并(除了“快进合并”之外,它不是真正的合并,而是用新的分支头替换旧的分支头),因为您正在处理相同的分支;你只有两份。当您的分析完成并且能够更新分析分支时,只需在分析中执行git merge--ff only master
;您可以在任何方便的存储库中执行此操作,但不要忘记使用git-push-other存储库将更改同步回来
另一个选项(由于Git版本2.5)是命令,它允许多个独立的工作树,您可以在其中独立地Git checkout
等。此选项与上面的克隆选项之间的区别在于,这里只有一组分支
然而(从2.8版开始),这仍然被认为是一个“实验性”功能,我个人没有用它来评论它的可靠性和实用性。作为凯文·里德解释的复制回购协议的替代方案,您也可以使用git new workdir
为您的回购协议创建第二个工作副本。这样,两个工作副本将始终自动看到相同的分支,因为它们共享一个git回购
与克隆回购协议相比,其优势在于无需任何手动同步/合并。在workdir A中提交时,提交将在workdir B中可见(例如,git log
)
唯一需要注意的是:当您更改存储库(提交、重定基址、重置分支等)时,您不应该在另一个workdir中签出同一个分支,否则git会有点困惑(请参阅)
请参阅:这似乎是个好主意。如果我git clone
我的存储库(没有--mirror
,因为我使用Dropbox作为专用远程跟踪存储库,如上所述),我仍然可以创建新的分支并同步它们吗?如果我创建了一个新的功能分支,我是否应该在我的原始
存储库和新的分析
存储库中使用相同的名称创建它?或者,如果我总是只将original
存储库的master
分支合并到新的analysis
存储库中,那么只在original
存储库中创建它就够了吗?如果您对analysis
分支所做的唯一一件事就是从master
合并到analysis
,那么是的,该分支不需要位于分析存储库之外的任何位置。事实上,它不需要被认为是一个单独的分支:它只是该存储库中唯一的分支,上游是origin/master
。您对它所做的每一次合并都应该是快速的。谢谢,这对我帮助很大。从旧的(开发)repo(origin/master
)合并到分析repo:在新的git clone
'd存储库中(不带--mirror
或任何其他特殊标志)git merge master
(带或不带--ff
标志)失败:fatal:“master”不指向提交
,而git merge--ff only origin/master
给出了致命:不可能快进,中止。
(我认为--ff only
失败,因为分析
分支也有它自己与分析参数等相关的提交),但是无论如何,git merge origin/master
工作得很好,使用“递归”策略进行合并。实际上,您可以同时打开多个分支: