- 
  
1. 開始
 - 
  
2. Git 基礎
- 2.1 取得一個 Git 倉儲
 - 2.2 紀錄變更到版本庫中
 - 2.3 檢視提交的歷史記錄
 - 2.4 復原
 - 2.5 與遠端協同工作
 - 2.6 標籤
 - 2.7 Git Aliases
 - 2.8 總結
 
 - 
  
3. 使用 Git 分支
 - 
  
4. 伺服器上的 Git
- 4.1 通訊協定
 - 4.2 在伺服器上佈署 Git
 - 4.3 產生你的 SSH 公鑰
 - 4.4 設定伺服器
 - 4.5 Git 常駐程式
 - 4.6 Smart HTTP
 - 4.7 GitWeb
 - 4.8 GitLab
 - 4.9 第3方 Git 託管方案
 - 4.10 總結
 
 - 
  
5. 分散式的 Git
 
- 
  
6. GitHub
- 6.1 建立帳戶及設定
 - 6.2 參與一個專案
 - 6.3 維護專案
 - 6.4 Managing an organization
 - 6.5 Scripting GitHub
 - 6.6 總結
 
 - 
  
7. Git 工具
- 7.1 Revision Selection
 - 7.2 Interactive Staging
 - 7.3 Stashing and Cleaning
 - 7.4 Signing Your Work
 - 7.5 Searching
 - 7.6 Rewriting History
 - 7.7 Reset Demystified
 - 7.8 Advanced Merging
 - 7.9 Rerere
 - 7.10 Debugging with Git
 - 7.11 Submodules
 - 7.12 Bundling
 - 7.13 Replace
 - 7.14 Credential Storage
 - 7.15 總結
 
 - 
  
8. Customizing Git
- 8.1 Git Configuration
 - 8.2 Git Attributes
 - 8.3 Git Hooks
 - 8.4 An Example Git-Enforced Policy
 - 8.5 Summary
 
 - 
  
9. Git and Other Systems
- 9.1 Git as a Client
 - 9.2 Migrating to Git
 - 9.3 Summary
 
 - 
  
10. Git Internals
- 10.1 Plumbing and Porcelain
 - 10.2 Git Objects
 - 10.3 Git References
 - 10.4 Packfiles
 - 10.5 The Refspec
 - 10.6 Transfer Protocols
 - 10.7 Maintenance and Data Recovery
 - 10.8 Environment Variables
 - 10.9 Summary
 
 
- 
  
A1. 附錄 A: Git in Other Environments
- A1.1 Graphical Interfaces
 - A1.2 Git in Visual Studio
 - A1.3 Git in Eclipse
 - A1.4 Git in Bash
 - A1.5 Git in Zsh
 - A1.6 Git in Powershell
 - A1.7 Summary
 
 - 
  
A2. 附錄 B: Embedding Git in your Applications
- A2.1 Command-line Git
 - A2.2 Libgit2
 - A2.3 JGit
 
 - 
  
A3. 附錄 C: Git Commands
- A3.1 Setup and Config
 - A3.2 Getting and Creating Projects
 - A3.3 Basic Snapshotting
 - A3.4 Branching and Merging
 - A3.5 Sharing and Updating Projects
 - A3.6 Inspection and Comparison
 - A3.7 Debugging
 - A3.8 Patching
 - A3.9 Email
 - A3.10 External Systems
 - A3.11 Administration
 - A3.12 Plumbing Commands
 
 
2.1 Git 基礎 - 取得一個 Git 倉儲
假如您只能閱讀一章來學習 Git,那麼這個章節就是您的不二選擇。 本章節涵蓋你以後使用 Git 來完成絕大多數工作時,最常被使用的基本指令。 在讀完本章節後,你應該有能力設定及初始化一個倉儲(repository)、開始及停止追蹤檔案(track)、預存(stage)及提交(commit)更新。 本章還會提到如何讓 Git 忽略某些檔案和檔案匹配(patterns)、如何迅速而簡單地撤銷錯誤操作、如何瀏覽你專案的歷史版本及觀看不同提交(commits)之間的變更、以及如何將更新推送(push)至遠端倉儲或從遠端倉儲拉取(pull)提交。
取得一個 Git 倉儲
你有兩種主要方法來取得一個 Git 倉儲。 第一種是將現有的專案或者資料夾匯入 Git; 第二種是從其它伺服器克隆(clone)一份現有的 Git 倉儲。
在現有資料夾中初始化倉儲
若你打算使用 Git 來追蹤(track)現有的專案,只需要進入該專案的資料夾並執行:
$ git init
這個命令將會建立一個名為 .git 的子資料夾,其中包含 Git 所有必需的倉儲檔案,也就是 Git 倉儲的骨架。
到現在這步驟為止,倉儲預設沒有追蹤任何檔案。
(想知道你剛建立的 .git 資料夾內有些什麼檔案,請參考[ch10-git-internals])
如果你的專案資料夾原本已經有檔案(不是空的),那麼建議你應該馬上追蹤這些原本就有的檔案,然後進行第一次提交。
你可以通過多次 git add 指令來追蹤完所有你想要追蹤的檔案,然後執行 git commit 提交:
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
進行這些動作應該不會花你太多時間。 到現在這步驟為止,你已經得到了一個追蹤若干檔案及第一次提交內容的 Git 倉儲。
克隆現有的倉儲
若你想要取得現有 Git 倉儲的複本(例如:你想要開始協作的倉儲),那你需要使用的命令是 git clone。
若你熟悉其它像是 Subversion 的版本控制系統,你應該注意現在這個命令是克隆(clone),而非取出(checkout)。
這是 Git 和其他版本控制系統的重要差異:Git 並不僅只是取得專案最新的內容,而是把遠端倉儲內幾乎所有的資料都抓回來了。
專案歷史紀錄中,每個檔案的每個版本預設都會在你執行 git clone 時被拉取(pull)回來。
實際上,如果伺服器的硬碟損壞,你通常可以使用任何客戶端克隆的倉儲來將伺服器重建回原本克隆的狀態。(你可能遺失一些伺服器的掛勾程式 hooks,但你所有的版本資料都還會健在,請查看 在伺服器上佈署 Git 獲得更多資訊)
克隆倉庫的命令格式是 git clone [url]。
例如:若你想克隆名為 libgit2 的 Git linkable library,可以執行下列命令:
$ git clone https://github.com/libgit2/libgit2
這指令將會建立名為「libgit2」的資料夾,並在這個資料夾下初始化一個 .git 資料夾,從遠端倉儲拉取所有資料,並且取出(checkout)專案中最新的版本。
若你進入新建立的 libgit2 資料夾,你將會看到專案的檔案都在裡面了,並且準備就緒等你進行後續的開發或使用。
若你想要將倉儲克隆到「libgit2」以外名字的資料夾,只需要再多指定一個參數即可:
$ git clone https://github.com/libgit2/libgit2 mylibgit
這個命令做的事與上一個命令大致相同,只不過在本地創建的倉庫名字變為 mylibgit。
Git 支援多種數據傳輸協定。
上一個範例採用 https:// 協定,但你可能會看過 git:// 或 user@server:path/to/repo.git 等使用 SSH 傳輸的協定。
在 在伺服器上佈署 Git 章節將會介紹這些協定在伺服器端如何配置及使用,以及各種方式的優缺點。