闪开让我来。
依我看,说git好的,都没有说到点子上。说git不好的,可能真是不懂linus创造git的上下文。要是拿企业内开发的上下文来看git,可是看不出什么好的。我呢,也就是试着去懂吧。
=======
我觉得这问题不能仅仅考虑技术,得考虑人。
我暂时忘掉SVN,为了Git而学习Git,以Linus的思维替代我的思维。然后我发现了如此深刻的人性洞察和简单的应对方法。linux的工作流使得git是显然必须的。以下内容是我看了linus在google的演讲后写的,因此很多就是对linus思想的DUMP。
自洽的、最少依赖的个人工作得到支持。1000多人的Linux开发团队是分布在世界各地的,使用git也就不必依赖中心服务器、不必需要很少的网络。就在自己的电脑上就有完整的仓库,可以做任何版本管理,除了分享代码。SVN显然是不合适的,因为单点故障大家甚至无法提交,更加无法开分支,这是无法忍受的。
剔除害群之马很简单。如果Linus经过观察,发现有些程序员特别容易出漏子,那么封杀的办法就是不必拉取即可。实际上Linus就是这样干过。如果是SVN,就变成了撤销惹麻烦的开发者的账号或者限定他的访问范围,并且从仓库中移除麻烦的代码提交。就是说,封杀的方法在git而言,是不做某事即可,SVN是做一系列事情才可以。一正一反,大家可以体会一下。Linus喜欢前者,并且得心应手。这样的工作流程就避开了很多“政治”问题,让他的集成代码过程变得主动。
可以使用信任网络。Linux太大了,不可能完全看完补丁代码的方式来识别信任,这个Linus曾经干过,最后的结果当然是放弃。如果发现有些程序员特别优秀,他只要选择拉取他们的实现。这些程序员也只是拉取他们信任的程序员的实现。这样的信任网络是可以层次化的,因此对应于1000多人的开发者来说,这样做确实可以通过分层的信任网络达成大规模的团队协作。如果是SVN,我不知道如何做可以更好
4.轻量的分支开销鼓励大量被使用。对于这样的团队,为了敏捷的迭代,如果有想法就分支(这样的开发隔离想法是很有价值的),那么在svn上分支是海量的并且全局的大家互相影响,因此是要命的。而对于Git总数当然是海量,但是每个人的分支都在自己的仓库内,不会影响到他人。且分支无需连接服务器,因此是飞速的。
所以,对于Linux团队来说,Git是必须的。特别是它的分布式,可以帮助建立信任网络,减少政治问题。它的设计,首先是关于人的,关于最佳的工作流程的、技术这是这些思想的完美载体。Linus不仅仅创建了Linux,也实际上管理着一个巨大的团队,做法就是用一套工具提供信任网络和少政治的工作流程,从而可以不管。说Linus是此团队的“仁君”,并非缪赞。想想混乱的现实世界,我确实对这个高手团队的管理方法感到敬佩。
这解释了开源代码项目使用git的热潮。它符合人性的光辉。
==============技术上的支持
自身优势
自己可以玩。服务器下架,启动不了,客户端离线,都可以继续工作。什么都不缺
分支。随时开分支以便实验想法,不干扰别人
大部分都可以本地,本地就是快
提交粒度大小随意,最少一行,参见hunk
伙伴优势
github太火,人多高手多,热闹
github社交特性,引发PK,不再一个人
对手形势
我就用过svn和git,就比较他们两.svn已经药丸
https://www.google.com/trends/explore#q=git%2C%20svn&cmpt=q&tz=Etc%2FGMT-8
这些年企业内的开发流程乏善可陈,开源界红红火火,那些整日贫乏的面孔,不去学习开源界的性感怎么办。所以,git就这么火了呗。