-
1. 起步
-
2. Git 基礎
-
3. Git 分支
-
4. 伺服器上的 Git
- 4.1 協議
- 4.2 在伺服器上部署 Git
- 4.3 生成 SSH 公鑰
- 4.4 架設伺服器
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方託管服務
- 4.10 小結
-
5. 分散式 Git
-
A1. 附錄 A: Git 在其他環境
- A1.1 圖形介面
- A1.2 Visual Studio 中的 Git
- A1.3 Visual Studio Code 中的 Git
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git
- A1.5 Sublime Text 中的 Git
- A1.6 Bash 中的 Git
- A1.7 Zsh 中的 Git
- A1.8 PowerShell 中的 Git
- A1.9 小結
-
A2. 附錄 B: 在應用程式中嵌入 Git
-
A3. 附錄 C: Git 命令
1.1 入門 - 關於版本控制
本章將介紹 Git 的入門知識。我們將首先解釋版本控制工具的一些背景知識,然後介紹如何在你的系統上執行 Git,最後是如何設定 Git 來開始工作。在本章結束時,你應該能夠理解 Git 的存在原因,為什麼你應該使用它,並且已經準備好開始使用它。
關於版本控制
什麼是“版本控制”?你為什麼應該關心?版本控制是一個系統,它記錄檔案或一組檔案隨時間的變化,以便你以後可以檢索特定版本。在本書的示例中,你將使用軟體原始碼作為被版本控制的檔案,但實際上,你幾乎可以用計算機上的任何型別的檔案來做這件事。
如果你是一名平面設計師或網頁設計師,並且想要保留影像或佈局的每個版本(這肯定是你想要的),那麼版本控制系統(VCS)是一個非常明智的選擇。它允許你將選定的檔案恢復到之前的狀態,將整個專案恢復到之前的狀態,比較隨時間的變化,檢視是誰最後修改了可能導致問題的內容,是誰引入了問題以及何時引入的,等等。使用 VCS 通常也意味著,如果你搞砸了或丟失了檔案,可以輕鬆恢復。此外,所有這一切的開銷都非常小。
本地版本控制系統
許多人選擇的版本控制方法是將檔案複製到另一個目錄(如果他們很聰明,可能會是帶時間戳的目錄)。這種方法非常普遍,因為它很簡單,但也很容易出錯。你很容易忘記你當前在哪個目錄,不小心寫入錯誤的檔案,或者複製你不想複製的檔案。
為了解決這個問題,很久以前,程式設計師開發了本地 VCS,它有一個簡單的資料庫,將所有檔案的更改都置於修訂控制之下。
最受歡迎的 VCS 工具之一是名為 RCS 的系統,該系統至今仍隨許多計算機分發。 RCS 的工作方式是將補丁集(即檔案之間的差異)以特殊格式儲存在磁碟上;然後,透過累加所有補丁,它可以重建任何檔案在任何時間點的外觀。
集中式版本控制系統
人們遇到的下一個主要問題是需要與其他系統上的開發人員協作。為了解決這個問題,開發了集中式版本控制系統(CVCS)。這些系統(如 CVS、Subversion 和 Perforce)有一個包含所有版本化檔案的單一伺服器,以及許多從該中央位置簽出檔案的客戶端。多年來,這一直是版本控制的標準。
這種設定提供了許多優勢,尤其相對於本地 VCS。例如,每個人在一定程度上都知道專案中的其他人在做什麼。管理員可以對誰可以做什麼進行精細控制,並且管理 CVCS 比處理每個客戶端上的本地資料庫要容易得多。
然而,這種設定也有一些嚴重的缺點。最明顯的是集中式伺服器代表的單點故障。如果伺服器宕機一個小時,那麼在這一個小時內,沒有人能夠進行協作,也無法將版本化更改儲存到他們正在處理的任何內容中。如果儲存中央資料庫的硬碟驅動器損壞,並且沒有保留適當的備份,那麼你將丟失所有內容——整個專案的歷史記錄,除了人們碰巧在本地機器上擁有的任何單個快照。本地 VCS 也有同樣的問題——每當專案的整個歷史記錄集中在一個地方時,你都有丟失一切的風險。
分散式版本控制系統
這時就輪到分散式版本控制系統(DVCS)登場了。在 DVCS(如 Git、Mercurial 或 Darcs)中,客戶端不僅僅是簽出檔案的最新快照;它們會完整地映象儲存庫,包括其完整的歷史記錄。因此,如果任何伺服器發生故障,並且這些系統透過該伺服器進行協作,那麼任何客戶端儲存庫都可以被複制回伺服器以進行恢復。每次克隆實際上都是所有資料的完整備份。
此外,這些系統中的許多都能很好地處理擁有多個遠端儲存庫進行工作,因此你可以在同一專案中與不同的人群以不同的方式同時協作。這允許你設定集中式系統中不可能實現的幾種工作流程,例如分層模型。