Git(分布式版本控制系統(tǒng))
Git(讀音為/gɪt/)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。也是Linus Torvalds為了幫助管理Linux內(nèi)核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼的版本控制軟件。
Torvalds 開(kāi)始著手開(kāi)發(fā) Git 是為了作為一種過(guò)渡方案來(lái)替代 BitKeeper 。
Git 介紹
Git --- The stupid content tracker, 傻瓜內(nèi)容跟蹤器。Linus Torvalds 是這樣給我們介紹 Git 的。
Git 是用于 Linux內(nèi)核開(kāi)發(fā)的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫(kù)的方式,不必服務(wù)器端軟件支持(wingeddevil注:這得分是用什么樣的服務(wù)端,使用http協(xié)議或者git協(xié)議等不太一樣。并且在push和pull的時(shí)候和服務(wù)器端還是有交互的。),使源代碼的發(fā)布和交流極其方便。 Git 的速度很快,這對(duì)于諸如 Linux kernel 這樣的大項(xiàng)目來(lái)說(shuō)自然很重要。 Git 最為出色的是它的合并跟蹤(merge tracing)能力。
實(shí)際上內(nèi)核開(kāi)發(fā)團(tuán)隊(duì)決定開(kāi)始開(kāi)發(fā)和使用 Git 來(lái)作為內(nèi)核開(kāi)發(fā)的版本控制系統(tǒng)的時(shí)候,世界開(kāi)源社群的反對(duì)聲音不少,最大的理由是 Git 太艱澀難懂,從 Git 的內(nèi)部工作機(jī)制來(lái)說(shuō),的確是這樣。但是隨著開(kāi)發(fā)的深入,Git 的正常使用都由一些友好的腳本命令來(lái)執(zhí)行,使 Git 變得非常好用,即使是用來(lái)管理我們自己的開(kāi)發(fā)項(xiàng)目,Git 都是一個(gè)友好,有力的工具。現(xiàn)在,越來(lái)越多的著名項(xiàng)目采用 Git 來(lái)管理項(xiàng)目開(kāi)發(fā).
作為開(kāi)源自由原教旨主義項(xiàng)目,Git 沒(méi)有對(duì)版本庫(kù)的瀏覽和修改做任何的權(quán)限限制。
目前GIT已經(jīng)可以在windows下使用,主要方法有二:msysgit和Cygwin。Cygwin和Linux使用方法類似,Windows版本的GIT提供了友好的GUI(圖形界面),安裝后很快可以上手,不在此做大篇幅介紹。
本文將以 Git 官方文檔 Tutorial, core-tutorial 和 Everyday GIT 作為藍(lán)本翻譯整理,但是暫時(shí)去掉了對(duì) Git 內(nèi)部工作機(jī)制的闡述,力求簡(jiǎn)明扼要,并加入了作者使用 Git 的過(guò)程中的一些心得體會(huì),注意事項(xiàng),以及更多的例子。建議你最好通過(guò)你所使用的 Unix / Linux 發(fā)行版的安裝包來(lái)安裝 Git, 你可以在線瀏覽本文 ,也可以通過(guò)下面的命令來(lái)得到本文最新的版本庫(kù),并且通過(guò)后面的學(xué)習(xí)用 Git 作為工具參加到本文的創(chuàng)作中來(lái)。
(Snake.Zero 注:以下假設(shè)環(huán)境為Unix/Linux,本次修正主要是版本問(wèn)題,git-add git-init-db等命令都改為了類似git add形式的,以免誤導(dǎo)新手。)
Git 特點(diǎn)
分布式相比于集中式的最大區(qū)別在于開(kāi)發(fā)者可以提交到本地,每個(gè)開(kāi)發(fā)者通過(guò)克隆(git clone),在本地機(jī)器上拷貝一個(gè)完整的Git倉(cāng)庫(kù)。
如圖1所示是經(jīng)典的git開(kāi)發(fā)過(guò)程。
Git的功能特性:
從一般開(kāi)發(fā)者的角度來(lái)看,git有以下功能:
1、從服務(wù)器上克隆完整的Git倉(cāng)庫(kù)(包括代碼和版本信息)到單機(jī)上。
2、在自己的機(jī)器上根據(jù)不同的開(kāi)發(fā)目的,創(chuàng)建分支,修改代碼。
3、在單機(jī)上自己創(chuàng)建的分支上提交代碼。
4、在單機(jī)上合并分支。
5、把服務(wù)器上最新版的代碼fetch下來(lái),然后跟自己的主分支合并。
6、生成補(bǔ)丁(patch),把補(bǔ)丁發(fā)送給主開(kāi)發(fā)者。
7、看主開(kāi)發(fā)者的反饋,如果主開(kāi)發(fā)者發(fā)現(xiàn)兩個(gè)一般開(kāi)發(fā)者之間有沖突(他們之間可以合作解決的沖突),就會(huì)要求他們先解決沖突,然后再由其中一個(gè)人提交。如果主開(kāi)發(fā)者可以自己解決,或者沒(méi)有沖突,就通過(guò)。
8、一般開(kāi)發(fā)者之間解決沖突的方法,開(kāi)發(fā)者之間可以使用pull 命令解決沖突,解決完沖突之后再向主開(kāi)發(fā)者提交補(bǔ)丁。
從主開(kāi)發(fā)者的角度(假設(shè)主開(kāi)發(fā)者不用開(kāi)發(fā)代碼)看,git有以下功能:
1、查看郵件或者通過(guò)其它方式查看一般開(kāi)發(fā)者的提交狀態(tài)。
2、打上補(bǔ)丁,解決沖突(可以自己解決,也可以要求開(kāi)發(fā)者之間解決以后再重新提交,如果是開(kāi)源項(xiàng)目,還要決定哪些補(bǔ)丁有用,哪些不用)。
3、向公共服務(wù)器提交結(jié)果,然后通知所有開(kāi)發(fā)人員。
Git 優(yōu)點(diǎn)
適合分布式開(kāi)發(fā),強(qiáng)調(diào)個(gè)體。
公共服務(wù)器壓力和數(shù)據(jù)量都不會(huì)太大。
速度快、靈活。
任意兩個(gè)開(kāi)發(fā)者之間可以很容易的解決沖突。
離線工作。
Git 缺點(diǎn)
資料少(起碼中文資料很少)。
學(xué)習(xí)周期相對(duì)而言比較長(zhǎng)。
不符合常規(guī)思維。
代碼保密性差,一旦開(kāi)發(fā)者把整個(gè)庫(kù)克隆下來(lái)就可以完全公開(kāi)所有代碼和版本信息。