在具有连续重构的项目上使用git / mercurial?

时间:2008-12-10 09:43:12

标签: git version-control refactoring

我想知道我是否真的有使用git / mercurial的案例。

我工作的项目是java和c#项目,通常有5到20人在努力 一个共同的目标(“释放”)。大多数开发人员都是专业开发人员 重构代码所有时间。所以典型的linux内核有很多 在单独的文件中相对独立的变化,我们有不断变化的重构 - 经常点击很多文件和很多代码。没有人害怕在这里改变代码。

现在有了颠覆,我们通过非常接近SVN HEAD来解决这个问题。我们中的一些人甚至有 自动svn up触发构建服务器的jabber广播。我们大多数人也学到了 (或者学得很快)如何规划我们的工作以接近SVN HEAD。如果你正在进行重大的重构我们 逐步将源树弯曲到新的方向,而不是离开太长时间。有时你只是计划 重构操作并在较少竞争的区域开始。几年后 以这种方式工作它成为第二天性。我们大多数人根本就没有离开小于的“舒适区” 距离svn头2小时。自动构建和svn头是项目“脉冲”,我们喜欢它。

当然,我们分支每个版本,但从发布分支回到主干的后退数量减少了 很快就会变得微不足道(我们得到了不错的测试报道)。与声源的私人分支一起运行数天/周 喜欢我们积极想要劝阻的东西,而且它不会经常发生。

git和mercurial声音方式都很酷,git略微更多,因为我更像是McGyver类型而不是James Bond类型。 但是当谈到建立实际转换的案例时,感觉就像Linus和我生活在两个不同的星球上。 大多数时候,我们希望我们的团队专注于HEAD。

GIT如何让我的版本控制更好? GIT如何让我改进我的流程?我是颠覆恐龙吗?

6 个答案:

答案 0 :(得分:19)

答案 1 :(得分:11)

您的团队使用Subversion的方式意味着发生了相当多的合并工作。几乎每次团队成员更新到最新的主线时,他们都会将他们的工作副本与最新的主线合并,即使他们在此阶段没有提交自己的更改。合并开销倾向于成为提交率和团队成员数量的产物,并且由于提交率是团队成员数量的函数,因此源代码管理开销为O(N ^ 2)。

在Mercurial / Git模型中,这种合并工作将在团队中分享。如果您经常从每个人那里获取变更集,那么通常您会发现其他人已经完成了您可能必须完成的几乎所有合并工作。而且,在合并破坏的情况下,人们通常已经修复了它。协调一对分支只需要完成一次,并且由于生成新分支的速率与团队成员的数量成正比,因此源代码管理开销为O(N)。

我希望20个开发人员在一个分支机构工作接近可能会涉及相当数量的合并工作(处理冲突,处理因独立开发而导致的回归),所以如果你让我感到惊讶尝试过Mercurial / Git并没有找到有用的生产力胜利。您认为您可以根据当前的进度管理100名开发人员吗?我估计Linux内核开发人员的数量是4000,但是他们完成了很多工作,总源代码管理开销必须是可以接受的。

只要您的源代码管理系统跟踪共同的父母,合并通常是自动的。由于更改之间的交互,每个合并都有可能是文本冲突或破坏构建和测试;你必须做的合并越少,你花在处理任何一种问题上的时间就越少。

因此,Mercurial / Git用户不再害怕分支机构。在BitKeeper(据我所知,真正引入这种工作方式的工具)之前,持久的分支是时间炸弹滴答,偶尔会爆炸并需要一周时间才能恢复。现在,我们可以毫不犹豫地分支,相信我们以后能够合并。在一个健康的团队中,其他人可以看到您的分支机构正在进行中,并将它们合并到他们的分支机构中,如果他们认为值得,可以在以后投入您在一个集中模型中,如果每个开发人员有3个或4个分支处于活动状态,并且我正在纠正它说是O(N ^ 2),那么你只是将源代码管理开销增加了3倍^ 2,即一个数量级,这可能足以真正伤害整体健康,财富和幸福。这是团队成员(和管理人员)通常担心集中式系统中的分支机构并努力将其最小化的根本原因。

答案 2 :(得分:2)

在svn / dinosaur破解中给你一个好的幽默投票。

可以使用Git以非常类似的方式使用subversion,这样就不会丢失任何内容,并且随着时间的推移,您和您的团队会发现一些用于高效分叉,分支或任何其他漂亮的Git特定功能的用途,它们可以以有计划和负责任的方式实施。

答案 3 :(得分:2)

我觉得善变很棒。尤其是TortoiseHg

我认为最有用的一点是能够与核心团队共享功能开发。

假设整个团队有20人,但您只想在提交到主存储库之前,与3-4人团队一起测试和开发一个功能。然后使用Mercurial,您可以在3-4编码器之间同步代码,直到您在提交到主存储库之前都满意为止。

或者你甚至可以成为自己的团队,例如。当你想在提交到主存储库之前在多个平台上测试代码时。

答案 4 :(得分:2)

首先,如果没有别的,你可以离线使用GIT,这样人们即使在旅行或在家时也可以继续在源代码控制下工作。如果任何一种情况都适用,你肯定可以从GIT中受益。

答案 5 :(得分:1)

您在SVN中描述的内容,可以使用git / mercurial

完成