-
1. 開始
-
2. Git 基礎
-
3. Git 分支
-
4. 伺服器上的 Git
- 4.1 通訊協定
- 4.2 在伺服器上取得 Git
- 4.3 產生您的 SSH 公開金鑰
- 4.4 設定伺服器
- 4.5 Git Daemon
- 4.6 智慧型 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 指令
10.1 Git 內部 - 水管與瓷器
您可能從較早的章節跳到本章,或者您可能一路按順序閱讀了整本書來到這裡。無論如何,我們將在此介紹 Git 的內部運作和實作。我們發現理解這些資訊對於了解 Git 的實用性和強大功能至關重要,但其他人則向我們表示,對於初學者來說,它可能會令人困惑且不必要的複雜。因此,我們將此討論設為本書的最後一章,以便您可以在學習過程的早期或稍後閱讀它。我們將決定權留給您。
既然您來到這裡,我們就開始吧。首先,如果還不清楚,Git 本質上是一個內容可定址的檔案系統,其上層寫了一個 VCS 使用者介面。您稍後會詳細了解這意味著什麼。
在 Git 的早期(主要是 1.5 版之前),使用者介面更加複雜,因為它強調這個檔案系統,而不是一個精緻的 VCS。在過去幾年中,UI 已被精簡,直到它像任何其他系統一樣乾淨易用。然而,關於早期 Git UI 複雜且難以學習的刻板印象仍然存在。
內容可定址檔案系統層非常酷,因此我們將在本章中首先介紹它。然後,您將了解傳輸機制和您可能最終必須處理的儲存庫維護任務。
水管與瓷器
本書主要介紹如何使用 Git 的 30 個左右的子指令,例如 checkout
、branch
、remote
等等。但是,由於 Git 最初是一個版本控制系統的工具組,而不是一個完整的使用者友善的 VCS,它有許多執行低階工作的子指令,並且設計為以 UNIX 風格串連在一起或從指令碼呼叫。這些指令通常稱為 Git 的「水管」指令,而更方便使用者使用的指令稱為「瓷器」指令。
正如您現在已經注意到的,本書的前九章幾乎完全處理瓷器指令。但是在本章中,您將主要處理較低階的水管指令,因為它們使您可以存取 Git 的內部運作,並有助於說明 Git 如何以及為何執行其操作。這些指令中的許多指令並非旨在在命令列上手動使用,而是用作新工具和自訂指令碼的構建塊。
當你在新的或現有的目錄中執行 git init
時,Git 會建立 .git
目錄,幾乎所有 Git 儲存和操作的內容都位於此處。如果您想要備份或複製您的儲存庫,將這個單一目錄複製到其他地方,就能得到幾乎所有您需要的東西。本章基本上都在探討您可以在這個目錄中看到的内容。以下是一個新初始化的 .git
目錄的典型樣子:
$ ls -F1
config
description
HEAD
hooks/
info/
objects/
refs/
根據您使用的 Git 版本,您可能會看到一些額外的內容,但這是一個全新的 git init
儲存庫 — 這是您預設會看到的樣子。 description
檔案僅供 GitWeb 程式使用,所以不用擔心它。 config
檔案包含您專案特定的組態選項,而 info
目錄則保留一個全域的排除檔案,用於存放您不想在 .gitignore
檔案中追蹤的忽略模式。 hooks
目錄包含您的用戶端或伺服器端掛鉤腳本,這些內容將在 Git 掛鉤中詳細討論。
這就剩下四個重要的項目: HEAD
和(尚未建立的) index
檔案,以及 objects
和 refs
目錄。這些是 Git 的核心部分。 objects
目錄儲存您資料庫的所有內容, refs
目錄儲存指向該資料中提交物件的指標(分支、標籤、遠端等), HEAD
檔案指向您目前已簽出的分支,而 index
檔案是 Git 儲存您的暫存區資訊的地方。您現在將詳細檢視每個部分,以了解 Git 如何運作。