一、Git版本控制器git
Git是一個免費、開源的分佈式版本控制系統,經過託管代碼,用以有效的高速的處理從很小到很是大的項目版本管理,最初的目的是爲更好的管理Linux內核開發設計。服務器
二、Git的實現原理分佈式
Git和其餘版本控制系統有不小的差異,Git自己關注文件的總體性是否有改變,但多數的CVS或SVN系統則關注文件內容的差別。所以Git更像是一個文件系統,能夠直接在本機上獲取數據,而沒必要鏈接到主機端獲取。工具
三、主要功能學習
Git是用於Linux內核開發的版本控制工具。與CVS、Subversion一類的集中式版本控制工具不一樣,它採用了分佈式版本庫的作法,不須要服務器端軟件,就能夠運做版本控制,使得源代碼的發佈和交流極其方便。Git的速度很快,這對於諸如Linux內核這樣的大項目來講天然很重要。Git最爲出色的是它的合併追蹤能力。fetch
實際上內核開發團隊決定開始開發和使用Git來做爲內核開發的版本控制系統的時候,世界上開源社區的反對聲音很多,最大的理由是Git太艱澀難懂,從Git的內部工做機制來講,的確是這樣。可是隨着開發的深刻,GHit的正常使用都由一些友善的命令稿來執行,使得其變得很是好用。如今,愈來愈多的著名項目採用Git來管理項目開發,例如:wine、U-boot等。設計
做爲開源自由原教旨主義項目,Git沒有對版本庫的瀏覽和修改作任何的權限限制,經過其餘工具也能夠達到有限的權限控制,好比gitosis、CodeBeamer MR。本來Git的使用範圍只適用於Linux/Unix平臺,可是在Windows平臺下的使用也日漸成熟,這主要歸功於Cygwin、msysgit環境,以及TortoiseGit這樣易用的GUI工具。Git的源代碼也已經加入了對Cygwin與MinGW編譯環境的支持,並逐漸完善,爲Windows用戶帶來福音。版本控制
四、Git分支指針
幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味着你能夠從主線上分離開來,而後在不影響主線的同時繼續工做。在不少版本控制系統中,這是個昂貴過程,經常須要建立一個源代碼目錄的完整副本,對大型項目來講會花費很長時間。對象
有人把Git分支模型稱爲「必殺技特性」,而正是由於它,將Git從版本控制系統家族裏區分出來。Git有何特別之處?Git分支能夠說是難以置信的輕量級,它的新建操做幾乎能夠在瞬間完成,而且在不一樣分之間切換起來也差很少快。與其餘版本控制系統不一樣,Git鼓勵在工做流程中頻繁使用分支與合併,哪怕一天以內進行許屢次都沒有關係。理解分支的概念並熟練運用後,你纔會意識到爲何Git是一個如此強大而獨特的工具,並今後改變你的開發方式。
何爲分支?在Git提交時,會保存一個提交(commit)對象,該對象包含一個指向暫存內容快照的指針,包含本次提交的做者等相關附屬信息,包含零個或多個指向該提交對象的父對象指針:首次提交是沒有直接祖先的,普通提交有一個祖先,有兩個或多個分支合併產生的提交則有多個祖先。爲直觀起見,咱們假設在工做目錄中有三個文件,準備將它們暫存後提交。暫存操做會對每個文件計算校驗和,而後把當前版本的文件快照保存到Git倉庫中,並將校驗和加入暫存區域。當使用 git commit 新建一個提交對象前,Git會先計算每個子目錄的校驗和,而後在Git倉庫中將這些目錄保存爲樹對象。以後Git建立的提交對象,除了包含相關提交信息外,還包含着指向這個樹對象的指針,如此就能夠在未來須要的時候重現這次快照的內容。Git中的分支,其本質上僅僅是指向commit對象的可變指針。Git會使用master做爲分支的默認名稱。在若干次提交後,你其實已經有了一個指向最後一次提交對象的master分支,它在每次提交的時候都會自動向前移動。Git保存着一個名爲HEAD的特別指針,它是一個指向你正在工做中的本地分支的指針(能夠看成當前工做分支的別名)。創建一個新的分支,轉換到其中進行一些工做,而後再回到原來的分支進行另一些工做,這些改變分別孤立在不一樣分支裏:咱們能夠在不一樣分支裏反覆切換,並在時機成熟的時候進行合併。
因爲Git中的分支實際上僅是一個包含所指對象的校驗和的文件,因此建立和銷燬一個分支就很是廉價。大多數版本控制軟件,在管理分支時採起備份全部項目文件到特定目錄的方式,因此根據項目文件的數量和大小不一樣,可能花費的時間也會有至關大的差異。而Git的實現與項目的複雜度無關,他永遠能夠在幾毫秒的時間內完成分支的建立和切換。同時由於每次提交都記錄了祖先信息,未來要合併分支時,尋找恰當的合併基礎的工做就很是容易。
五、Git的功能特性
從通常的開發者角度來講,其功能以下:
一、從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。
二、在本身的機器上根據不一樣的開發目的,建立分支,修改代碼。
三、到單機上本身建立的分支上提交代碼。
四、在單機上合併分支。
五、把服務器上最新的代碼fetch下來,而後跟本身的主分支合併。
六、生成補丁(patch),把補丁發送給主開發者。
七、看主開發者的反饋,若是主開發者發現兩個通常的開發者之間有衝突(他們之間能夠合做解決的衝突),就要求他們先解決衝突,而後再由其中一我的提交。若是主開發者能夠本身解決,或者沒有衝突,就經過。
八、通常開發者之間解決衝突的方法,開發者之間可使用pull命令解決衝突,解決完衝突後再向主開發者提交補丁。
六、優勢:
一、適合分佈式開發,強調個體。
二、公共服務器壓力和數據量都不會太大。
三、速度快,靈活。
四、任意兩個開發者之間能夠很容易解決衝突。
五、具備本地庫,能夠離線工做,而後再上傳。
七、缺點:
一、資料少。
二、學習週期相對而言比較長。
三、不符合常規思惟。
四、代碼保密性差,一旦開發者把整個庫克隆下來就能夠公佈全部代碼和版本信息。