2009-03-03 58 views
9

我刚刚继承了一个使用Git维护的项目。有一次,代码被部署到3个独立的系统上,每个系统都维护着自己的分散的Git仓库。整理一个Git混乱

3个系统的每一个都在3个不同的方向上扩展了原始基础系统。这三个系统中没有一个是相互同步的。主分支上有一些更改,其他分支在新分支上。

我怎样才能把3个不同来源在一起,这样我可以:

  1. 找到一个共同的基地工作;
  2. 找出哪些更改是应该应用于所有3个系统的错误修复;和
  3. 保持3个系统的健全方式,以便只有一个共同的分支并分离出3个不同系统所需的定制?

回答

13

我可能会先推送所有的存储库,以便在中央存储库中分离分支,从而可以轻松地在分支之间进行分配,合并等操作。

一个很好的可视化工具,如git-agegitnubgitxgiggle能创造奇迹,但你的任务可能会相当繁琐的,除非你能找到的分支点。如果在所有分支上应用了类似的修补程序,则可以使用(交互式)rebase对提交进行重新排序,以使它们的顺序相同。然后你可以开始“拉紧”你的分支,通过将提交提交给主分支向上移动分支点。关于如何使用rebase重新排列提交的一个很好的描述可以找到here

您可能需要采取的措施在Git Howto Index提供的链接中进行了描述。一个好的cheat sheet总是很好,有触手可及的。另外,我怀疑Eric Sinks的帖子“DVCS and DAGs, Part 1”的后续内容将包含一些有用的东西(它没有,但是是一个有趣的阅读nontheless)。

其他好到有链接:Git MagicGit ReadySourceMage Git Guide

我希望所有的回购已经好承诺,告诉你每个补丁的目的的消息,那就是或代码审查:)

至于如何保持定制,我们运气如下:

我们从定制代码与通用代码分离(或保持分离)开始。然后我们尝试了两种方法;这两个工作正常:

  1. 所有部署都有自己的存储库,其中定制保存。
  2. 所有部署都在“定制”存储库中拥有自己的分支。

首次部署后,看到的是,第二个是我们花了一些时间,试图预见未来的定制/切割点,以减少重复整个定制回购(ALT 1,这是我们目前使用的方法)事实并在基地/核心回购。

是的,我们会尽力,每当我们看到核心/定制拆分打滑:)

+1

感谢您的帮助

git reflog

。我是git的新手,对于我来说可能比其他习惯于它的人更具挑战性。 – 2009-03-03 10:48:04

4

确定无情地重构。经过一番大肆抨击之后,我设法做到了。对于任何人在类似的任务还着手,它会涉及到很多:

git rebase

命令和当事情变得一团糟:其次

git reset --hard [email protected]{ref}