Git是一个开源的分布式版本控制系统(也可以叫工具或是软件)。 ## 一段历史 Linux之父 Linus Torvalds与BitMover公司创始人Larry McVoy曾是很要好的朋友, BitMover开发了一款还不错的分布式SCM(软件配置管理)软件-Bitkeeper。 基于Linux的影响力,Larry McVoy说服了Linus使用Bitkeeper管理Linux * 1999年12月, Linux PowerPC项目首 先开始使用BitKeeper; * 2002年2月,开始用它来管理Linux内核代码主线。 但是作为一个商业付费的软件,虽然提供了一个可以免费使用的精简版本,但是不允许修改。 Linus内核开发从2002年到2005年的3年时间里,使用BitKeeper,Linux的开发步伐加快了两倍。但是作为开源精神的领头羊,使用非自由软体来进行Linux核心代码的管理,除了受到其他自由软件大佬(Richard Stallman)的批评外,Liunx团队内部也是非议很多。 2005年, Samba文件服务器开发人Andrew Tridgell写了链接BitKeeper存储库的简单程序,被Larry McVoy指控对BitKeeper进行逆向工程,Linus多次协调无效,McVoy还是决定停止BitKeeper对Linux的支持。一怒之下,Linus在BitKeeper的使用经验基础上, 在一个周末的时间创造了Git, 将Bitkeeper送入了末路。 ## 集中式与分布式: 与其他的版本控管工具相比, Git 最大的特点就是分布式。 与分布式对应的是集中式, 也就是服务器-客户端的模式。这种模式的特点是有一台中央的代码控管服务器, 不同的开发机器作为客户端从服务器获取代码和进行代码提交。 而对于分布式的Git来说, 每个客户端的机器都可以作为代码控管的服务器, 可以进行代码的检出和上传。 但是, Git 也有中央服务器的概念,而且在大部分的状况下都会使用到中央服务器。 对于习惯集中式代码控管工具的开发者来说(比如Perforce), 可以这样来理解集中式: 如果在每台机器的本地安装一个Perforce 服务器, 再到一台共用的服务器上架设一台Perforce服务器作为中央服务器。代码先提交到本地的服务器, 再从本地的服务器汇总到中央服务器。只是Perforce等工具没有这样的功能, Git 做到了。 因为本地也是服务器, 也可以进行提交等动作, 所以不联网也可以进行代码的提交和控管, 等到网络恢复才推送到中央服务器。除此,Git 还支持多种协议和提交方式, 在一些Git的平台上可以使用网页的方式进行代码改动,提交和管理