了解Git
Git是一个免费开源的分布式版本控制系统(DVCS),它旨在快速、高效地处理任何规模和范围的项目。
Git是由Linux创建者Linus Torvalds发明的,用于支持庞大的、不同的Linux开发人员群体,但Git的受欢迎程度与http://github.com关系更紧密,Git已存在多年,但直到GitHub受欢迎程度激增之后,才在Linux社区之外获得广泛认可。GitHub允许你免费托管开源项目,它还提供简单的钩子和友好的用户体验,使Git更容易使用。
Mac Homebrew等其他项目也对Git投入很深,Homebrew允许你在Mac上安装开源软件包,构建和管理这些公式的工具利用了Git,用于差异工具、制作补丁、管理资源,以及通过拉取请求提交新的和更新的包。
Git与其他DVCS
另外两个最受欢迎的DVCS选择是Mercurial和Bazaar,Mercurial有命令行工具hg
(以汞的化学符号命名),而Bazaar的命令行工具是bzr
。
Mercurial与许多开源项目相关联,Ubuntu Linux背后的Canonical公司使用Bazaar,开发人员通常需要熟悉Git、Mercurial和Bazaar。
开发人员使用的DVCS通常由开发人员参与的组织决定,而不是由给定的一组功能决定,Git、Mercurial和Bazaar都具有基本功能,例如分支、标签、合并以及不依赖于中央服务器,目前使用Git的开发人员可能会在一年后在Mercurial管理的另一个项目开始工作。
关键的挑战是了解每个工具的命令和语言的差异,例如,Mercurial中的hg revert
意味着回滚当前更改,恢复为正式版本。git revert
意味着添加一个反转先前编辑的新提交,Git有一个命令来支持像Mercurial这样的更改,但它有一个不同的名称。
Git与非分布式SCM
几个非分布式源代码管理系统(SCM)早于DVCS并仍在使用中:
- Subversion
- CVS(并发版本系统)
许多专有版本控制系统目前仍在大量使用,例如:
- Rational ClearCase
- Perforce
- Visual SourceSafe
这些专有产品通常与其他软件开发工具捆绑在一起,因此在某些软件开发商店中根深蒂固。
与DVCS模型相反,这些系统中的关键因素是它们依赖中央服务器来保存跟踪版本和分支所涉及的所有关键数据,从本质上讲,开发人员在家中进行多次提交,与此中央服务器断开连接,然后将其添加到服务器,这不是内置功能,其中一些系统增加了支持此类功能的特性,但它并不是其本质的核心部分。
为了说明DVCS和非DVCS的SCM系统之间的区别,请考虑两个人如何分别独立工作,在使用DVCS时如何在某个遥远的地方会面,比如在游轮旅行中,并共享提交。共享提交将具有与中央服务器上相同的权限,使用非分布式SCM时,这两个人只能共享代码差异,而不能提交,为了使提交成为正式提交,必须在到家并访问中央服务器时将提交发布到中央服务器。
DVCS的固有优势
像Git这样的工具的内置优势在于每个拥有副本的人都拥有重建项目所需的一切,如果中央服务器崩溃且所有数据都丢失,则可以将任何远程副本指定为正式副本,因为它将具有足够的信息以继续,如果开发人员没有最新的提交,则会出现唯一的差异。