Git是分布式版本控制系统,与SVN相比拥有比较明显的优势。git-svn是一种桥接工具,在server利用svn的情况下,可以让大家在客户端享受git提供的便利。
下面简单的介绍下git的功能和特点。
一、GIT的特点
分布式和集中式的最大区别在于开发者可以本地提交。每个开发者机器上都有一个服务器的数据库。
从一般开发者的角度来看git有以下功能:
1:从服务器上克隆数据库(包括代码和版本信息)到单机上。
2:在自己的机器上创建分支,修改代码。
3:在单机上自己创建的分支上提交代码。
4:在单机上合并分支。
5:新建一个分支,把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6:生成补丁(patch),把补丁发送给主开发者。
7:看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8:一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
二、git给大家带来的好处(大部分来着网络):
1. 分布式的应用提供了本地的版本管理功能:不需要远程或架设服务器就能做到本地版本管理.(每个程序猿都有一个终极梦想:在飞去Newworks的飞机上用Macbook写一个不超过1000行的代码,然后就搞定了世界七大根服务器,然后再本地提交一下就Ok了,而不用担心没有vpn连不到公司内网,当网络连接之后git client会帮你完成这个工作,你的粉丝就能看到这段代码了)
2. 不污染子目录的track文件:svn每个子目录都要扔一个.svn.这个实在是.. .(我想很多人都碰到过svnlock folder的情况.实在让人气急败坏.实际上.svn文件就是罪魁祸首.各种clean up无果.delelte后svn up异常.真是.. )
3. 强大的branch:超轻量级的branch建立.(实际只是建立文件指针).推荐根据的gitworkflow的开发流程.将workspace分成几区.masterdev feature hotfix区等.开发层次就出来了.
4. merge工具的强力:git根据commit ticket依次再进行一次merge.提高了merge成功率.避免svnmerge中的难堪.即使merge失败.也不会生成乱七八糟的版本文件.简单修改后.commit就是神奇的git gc由于git本身不保存文件之前的差异文件.只保存每个文件的快照.所以在频繁修改大文件的情况下会造成git目录变得肥大不堪.git早就有了解决方案.git gc后,会在.git目录下生成一个packfile与idx文件.只保存文件差异.满塞!.
5. Github:github作为新一代的程序员靠实力,凭作品交流的sns+code host平台.将geek精神贯彻整站.cool!.相对而言googlecode则正在走下坡路.
三、简单的回顾一下源代码版本控制的发展,我大概还对下面这几个有比较深的印象:
Visual SourceSafe:微软的版本控制工具,仅支持Windows操作系统。虽然简单好用,但是仅适用于团队级开发,不能胜任企业级的开发工作。
Clearcase: IBM旗下Rational公司(2003年被IBM收购)的一款重量级的软件配置管理 (SCM, Software Configuration Managemen)工具。与CVS和VSS不同,Clearcase涵盖的范围包括版本控制、建立管理、工作空间管理和过程控制。从最初的软件配置计划,到配置项的确立,从变更控制到版本控制,Clearcase贯穿于整个软件生命周期。 Clearcase支持现有的绝大多数操作系统,但它的安装、配置、使用相对较复杂,并且需要进行团队培训。CVS: Concurrent Versions System。CVS 是有着三十年以上的时间的考验。CVS是开放源代码软件世界的一个伟大杰作,有人认为如今开源成功发展的幕后功臣之一当CVS莫属。Linux 的创始人 Linus 就把 Linux 的成功,归因于 CVS。由于CVS功能强大,跨平台,支持并发版本控制,而且免费,所以它在全球中小型软件企业中得到了广泛使用。CVS最大的遗憾就是缺少相应的技术支持,许多问题的解决需要自已寻找资料,甚至是研究源代码。CVS是一个典型的服务器/客户端软件,有UNIX版本的CVS 、Linux版本的CVS和WINDOWS版本的CVS。CVS支持远程管理,项目组分布开发时一般都采用CVS。
SVN: SubVersion。CVS纵然易用,但也有一些与生俱来的缺点,比如CVS不支持文件改名,只对文件控制版本而没有针对目录的管理,等等。之后CVS 的创始人之一在其现任公司的资助下开发了SubVersion,用以替代CVS。SubVersion 的设计目的就是针对CVS 的一些弱点进行改进。
SVN的版本控制流程
CVS纵然是一个老牌的工具产品,并也对开源事业有贡献,但CVS的命令行操作着实让一些使用者头疼。在对一个特定版本的文档Check in的时候,还要输入一长串的路径名、文件名。在操作易用性上与CVS形成对比的是微软家族的VSS。作为微软的产品,在图形界面化操作上自不用多言,但 VSS只能适用于小团队的开发工作。VSS是很好的入门级工具,但它的一些功能也太过于“入门”,在验证密码、保存密码这些基本功能上处理的不尽人意。适用于大型软件开发的有“中坚级”的Clearcase,用它来管理一些小型的项目管理有些“大材小用”。Clearcase支持目录版本管理、异地团队开发、视图、多服务器等强大功能,所以一些大公司把它做为一、二级产品管理用,但同样它的价格也不菲。CVS是开源的,免费的,更何况它还有一个理想的替代者——SVN。SVN的设计专门针对CVS的问题作了改进,命令的设计更为合理,对二进制文档和目录这样的数据加强了控制能力,并且吸收了VSS的 lock-modify-update(release)的模式和modify-merge模式的优点这两种方式在一定程度都支持并作了优化,没有提高使用的复杂度——这是难能可贵的。由于SVN的设计结构很好,所以很容易为它开发客户端,好像很快就有了tortoiseSVN,Eclipse插件等很多客户端,还有WEB模式的,可以远程管理,支持RSS更改订阅。
1. Git:一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
四、为了给大家一个直观的数据说明,用Google thend看一下这几个关键词的搜素趋势。
如果Google是可以被信任的话,可以看出:
(图一)cvs一直遥遥领先,这有点出人意料;Git的搜索在2009年超过了svn,悲剧的svn则保持着下降的趋势。
(图二)能说明我们的美国同行比较怀旧吗,cvs的搜索热度主要来自美国。
(图三)而中国的程序猿还在Svn的怀抱。
(图四)土耳其人比较热衷git。