我刚刚继承了一个使用 Git 维护的项目。有一次,代码被部署到 3 个独立的系统上,每个系统都维护着自己的分散式 Git 存储库。
3 个系统中的每一个都在 3 个不同的方向上扩展了原始基础系统。三个系统都没有相互同步。一些更改在主分支上,其他更改在新分支上。
我怎样才能将 3 个不同的来源放在一起,以便我可以:
- 找到一个共同的工作基础;
- 找出哪些更改是应该应用于所有 3 个系统的错误修复;和
- 以一种健全的方式维护 3 个系统,以便只有一个公共分支并分离出 3 个不同系统所需的定制?
我刚刚继承了一个使用 Git 维护的项目。有一次,代码被部署到 3 个独立的系统上,每个系统都维护着自己的分散式 Git 存储库。
3 个系统中的每一个都在 3 个不同的方向上扩展了原始基础系统。三个系统都没有相互同步。一些更改在主分支上,其他更改在新分支上。
我怎样才能将 3 个不同的来源放在一起,以便我可以:
我可能会首先将所有存储库推送到中央存储库中的单独分支,从中我可以轻松地在分支之间进行变基、合并等。
一个好的可视化工具,如git-age、gitnub、gitx、giggle可以创造奇迹,但你的任务可能会相当乏味,除非你能找到分支点。如果有类似的补丁应用于所有分支,您可以使用(交互式)rebase重新排序您的提交,使它们处于相同的顺序。然后你可以开始“压缩”你的分支,通过将提交放入 master 来向上移动分支点。关于如何使用 rebase 重新排序提交的一个很好的描述可以在这里找到。
Git Howto Index提供的链接中描述了您可能需要采取的操作。一份好的备忘单总是触手可及。另外,我怀疑 Eric Sinks 的后续文章“ DVCS 和 DAG,第 1 部分”将包含一些有用的内容(它没有,但读起来很有趣)。
其他值得拥有的链接是:Git Magic、Git Ready和SourceMage Git Guide
我希望所有的 repos 都有很好的提交消息,告诉你每个补丁的目的,就是那个或代码审查 :)
至于如何维护自定义,我们在以下方面很幸运:
我们首先将定制代码与通用代码分开(或保持分开)。然后我们尝试了两种方法;两者都运行良好:
在第一次部署并看到第二次是事实之后,我们花了一些时间试图预测未来的定制/切割点,以减少定制回购(替代品 1,这是我们目前使用的方法)和基础/核心中的重复回购。
是的,每当我们注意到核心/自定义拆分滑落时,我们都会尝试无情地重构 :)
好的。经过一番艰苦的努力,我设法做到了。对于任何从事类似任务的人来说,这将涉及很多:
git rebase
命令以及当事情搞砸时:
git reflog
其次是
git reset --hard HEAD@{ref}