
**
前言
git的背後有着一個非常精彩的成功故事。2005年4月,linus torvalds因不滿當時任何一個可用的開源版本控制系統,就親自着手實作了git。
時至今日,如果我們在google中搜尋“git version control”這幾個關鍵詞,都會看到數以百萬計的傳回結果。git已經俨然成為了新型開源項目的一個标準。許多大型的開源項目都已經或正在計劃遷移到git上來。
下面,我們來看一下這麼多人之是以會選擇git的原因。
git允許我們利用分支來開展工作:在一個由多個開發者并行協作的項目中,開發者各自會有很多不同的開發路線。git的優勢在于,它提供了一整套針對開發鍊的重新整合工具,以便我們對其進行合并、變基和撿取等操作。
工作流上的靈活性:git非常靈活。不但單一開發者可以用它,靈活團隊也可以找到使用它工作的合适方法,甚至一個由衆多開發者在不同的工作地點參與的大型國際項目也可以用它開發出一個很好的工作流。
适合奉獻合作:大多數開源項目所依靠的都是開發者的無私奉獻。是以,讓這種無私奉獻的方式盡可能地簡單化是一件非常重要的事。而這在一個集中式的版本控制系統中通常是很難做到的,因為我們不可能讓所有人都有權限去寫版本庫。但如果我們使用git,那麼每個人都先可以克隆一個獨立的工作版本庫,然後再對其進行後續的改動。
高性能:git在處理擁有許多檔案且曆史悠久的項目時速度也依然是非常快的。例如,使用git将linux核心源碼的目前版本切換到6年前的舊版本時,在一台macbook air上所需的時間不到1分鐘。考慮這兩個版本之間有着超過200000次的送出和40000個更改檔案,這已經足以讓人印象深刻了。
強大的抗故障和抗攻擊能力:由于項目曆史被分散存儲在多個分布式版本庫中,是以資料嚴重流失的可能性不大。再加上版本庫中有着巧妙簡單的資料結構,這確定了其中的資料即使在遙遠的未來也仍然會被正确地解釋。而且,它還使用了統一的加密校驗,這使得攻擊者難以對版本庫進行篡改。
離線開發與多點開發:分布式的體系結構可以使得離線開發或者邊旅行邊開發的方式變得非常容易。而且該結構在多點開發模式下,我們既不需要設定中央伺服器,也不需要固定的網絡連接配接。
強大的開源社群:除官方提供的詳細文檔外,你還可以在該社群找到無數相關的手冊、論壇、維基網站等,另外還有各種工具生态系統、托管平台、出版物、服務以及針對各個開發環境的插件,整個社群都正在茁壯成長。
可擴充性:git為使用者提供了許多實用指令,其中包括了能使我們更便于直接通路其遠端版本庫的指令。這可以讓git變得非常靈活,這種靈活性将允許其各種獨立應用提供比預設的git版本更為強大的功能。
git非常靈活。可為多種不同的角色所用,從偶爾需要版本化少量shell腳本的單一系統管理者,到linux核心項目中的上百個開發人員,一切皆有可能。當然,這種靈活性不是沒有代價的。在開始用git來開展工作之前,你還必須要做一組決定。例如以下幾種。
git中固然已經是分布式版本庫。但你是真的打算隻在本地工作,還是更願意建立一個中央版本庫?
git支援push和pull兩種資料傳輸類型,但我們需要同時使用它們嗎?如果讓你選,你會選哪一個?為什麼不是另一個?
分支與合并是git中兩個強大的功能。但是,我們應該開多少個分支呢?是根據每個軟體功能來開?還是針對每個發行版來開?還是隻該有一個分支?
為了便于入門,下面我們來總結一下工作流及其作用。
工作流指的是相關項目的日常操作規程。
工作流會給出具體的步驟。
工作流會顯示必要的指令和選項。
工作流非常适用于密切的團隊合作,而目前的這些現代軟體項目通常就出自這樣的合作。
一些工作流可能并不是目标問題唯一正确的解決方案,但它們是一個很好的起點,我們可以從中為自己的項目開發出高效的工作流。
我們之是以會重點介紹商業項目中靈活開發團隊的工作,是因為我們相信目前許多專業開發者(包括作者)都處于這樣的工作環境中。當然,這裡并不包括那些具有特殊要求的大型項目,因為這些項目通常有着很誇張的工作流,而且我們相信這些也不是大多數開發者會感興趣的項目。另外,這裡也不包括那些開源項目的開發,雖然這些項目也可以用git規劃出一個很有意思的工作流。
**[第1章 基本概念
<a href="https://yq.aliyun.com/articles/92153">1.2 版本庫,分布式工作的基礎所在</a>
<a href="https://yq.aliyun.com/articles/92154">1.3 分支的建立與合并很簡單</a>
<a href="https://yq.aliyun.com/articles/92197">1.4 本章小結</a>
**[第2章 入門
<a href="https://yq.aliyun.com/articles/92211">2.2 第一個git項目</a>
2.2.1 建立版本庫
2.2.2 首次送出
2.2.3 檢查狀态
2.2.4 送出修改
2.2.5 顯示曆史
<a href="https://yq.aliyun.com/articles/92226">2.3 git的協作功能</a>
2.3.1 克隆版本庫
2.3.2 從另一版本庫中擷取修改
2.3.3 從任意版本庫中取回修改
2.3.4 建立共享版本庫
2.3.5 用push指令上載修改
2.3.6 pull指令:取回修改
<a href="https://yq.aliyun.com/articles/92234">2.4 本章小結</a>