Git僅用了幾年時(shí)間就一躍成為了幾乎一統(tǒng)商業(yè)及開源領(lǐng)域的版本控制系統(tǒng)。本書全面介紹Git進(jìn)行版本管理的基礎(chǔ)和進(jìn)階知識(shí)。全書共10章,內(nèi)容由淺入深,展現(xiàn)了普通程序員和項(xiàng)目經(jīng)理如何有效利用Git提高工作效率,掌握分支概念,靈活地將Git用于服務(wù)器和分布式工作流,如何將開發(fā)項(xiàng)目遷移到Git,以及如何高效利用GitHub。
高效的版本控制是成功開發(fā)軟件項(xiàng)目的關(guān)鍵。自2005年誕生以來,Git以其分布式特點(diǎn)和對(duì)非線性開發(fā)的強(qiáng)有力支持,成為了許多軟件項(xiàng)目的版本控制系統(tǒng)。本書不僅是Git日常操作指南,而且深入剖析了Git的內(nèi)部原理,能有效幫助程序員提升軟技能。
如果你剛剛啟程探索Git,本書對(duì)于Git的用法、基本命令和分支機(jī)制的講解將助你輕松入門、不走彎路。
如果你在Git之路上已經(jīng)走了一些時(shí)日,本書關(guān)于Git服務(wù)器、配置文件和鉤子系統(tǒng)的內(nèi)容將為你補(bǔ)充繼續(xù)前行所需的能量。
如果你不得不同時(shí)使用Git和其他版本控制系統(tǒng),本書會(huì)教你如何將Git作為客戶端來輕松應(yīng)對(duì)此種情景。
【作者簡(jiǎn)介】
Scott Chacon
GitHub聯(lián)合創(chuàng)始人,曾任GitHub首xi信息官,現(xiàn)任在線教育創(chuàng)業(yè)公司Chatterbug的首xi執(zhí)行官。在GitHub工作的7年里,他負(fù)責(zé)維護(hù)Git主頁git-scm.com,并在許多技術(shù)大會(huì)上發(fā)表過演講,以此傳播Git文化和開源精神。GitHub ID:schacon。
Ben Straub
軟件開發(fā)者,曾就職于GitHub,參與開發(fā)了Libgit2開發(fā)包以及GitHub for Windows客戶端,另著有《GitHub實(shí)踐》。GitHub ID:ben。
【譯者簡(jiǎn)介】
門佳
GNU/Linux深度用戶,喜歡溯本求源,挖掘技術(shù)背后的來龍去脈,對(duì)程序語言設(shè)計(jì)理論、編譯技術(shù)、操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)、Web開發(fā)等領(lǐng)域均有涉獵,譯著包括《Linux Shell腳本攻略》《TCP Sockets編程》《精通JavaScript(第2版)》《Linux命令行與shell腳本編程大全(第3版)》等。
劉梓懿
ThoughtWorks高級(jí)軟件工程師,亞馬遜AWS認(rèn)證架構(gòu)師,曾為多個(gè)世界知名客戶提供軟件交付和咨詢服務(wù),在大型組織的云架構(gòu)應(yīng)用、持續(xù)交付、分層自動(dòng)化測(cè)試體系建設(shè)和DevOps轉(zhuǎn)型等方面擁有豐富的實(shí)踐經(jīng)驗(yàn)。GitHub ID:richardzone。
第1章 入門 1
1.1 關(guān)于版本控制 1
1.1.1 本地版本控制系統(tǒng) 1
1.1.2 集中式版本控制系統(tǒng) 2
1.1.3 分布式版本控制系統(tǒng) 3
1.2 Git簡(jiǎn)史 4
1.3 Git基礎(chǔ) 4
1.3.1 快照,而非差異 4
1.3.2 幾乎所有操作都在本地執(zhí)行 5
1.3.3 Git的完整性 6
1.3.4 Git通常只增加數(shù)據(jù) 6
1.3.5 三種狀態(tài) 7
1.4 命令行 8
1.5 安裝Git 8
1.5.1 Linux上的安裝方法 8
1.5.2 Mac上的安裝方法 8
1.5.3 Windows上的安裝方法 9
1.5.4 從源碼安裝 9
1.6 Git的首次配置 10
1.6.1 用戶身份 11
1.6.2 個(gè)人編輯器 11
1.6.3 檢查個(gè)人設(shè)置 12
1.7 獲取幫助 12
1.8 小結(jié) 12
第2章 Git基礎(chǔ) 13
2.1 獲取Git倉庫 13
2.1.1 在現(xiàn)有目錄中初始化Git倉庫 13
2.1.2 克隆現(xiàn)有倉庫 14
2.2 在Git倉庫中記錄變更 14
2.2.1 查看當(dāng)前文件狀態(tài) 15
2.2.2 跟蹤新文件 16
2.2.3 暫存已修改的文件 16
2.2.4 顯示更簡(jiǎn)潔的狀態(tài)信息 18
2.2.5 忽略文件 18
2.2.6 查看已暫存和未暫存的變更 19
2.2.7 提交變更 21
2.2.8 跳過暫存區(qū) 22
2.2.9 移除文件 23
2.2.10 移動(dòng)文件 24
2.3 查看提交歷史 25
2.4 撤銷操作 30
2.4.1 撤銷已暫存的文件 30
2.4.2 撤銷對(duì)文件的修改 31
2.5 遠(yuǎn)程倉庫的使用 32
2.5.1 顯示遠(yuǎn)程倉庫 32
2.5.2 添加遠(yuǎn)程倉庫 33
2.5.3 從遠(yuǎn)程倉庫獲取和拉取數(shù)據(jù) 34
2.5.4 將數(shù)據(jù)推送到遠(yuǎn)程倉庫 34
2.5.5 檢查遠(yuǎn)程倉庫 35
2.5.6 刪除和重命名遠(yuǎn)程倉庫 36
2.6 標(biāo)記 36
2.6.1 列舉標(biāo)簽 36
2.6.2 創(chuàng)建標(biāo)簽 37
2.6.3 注釋標(biāo)簽 37
2.6.4 輕量標(biāo)簽 38
2.6.5 補(bǔ)加標(biāo)簽 38
2.6.6 共享標(biāo)簽 39
2.6.7 檢出標(biāo)簽 39
2.7 Git別名 40
2.8 小結(jié) 41
第3章 Git分支機(jī)制 42
3.1 分支機(jī)制簡(jiǎn)述 42
3.1.1 創(chuàng)建新分支 44
3.1.2 切換分支 45
3.2 基本的分支與合并操作 48
3.2.1 基本的分支操作 48
3.2.2 基本的合并操作 52
3.2.3 基本的合并沖突處理 53
3.3 分支管理 55
3.4 與分支有關(guān)的工作流 56
3.4.1 長(zhǎng)期分支 57
3.4.2 主題分支 58
3.5 遠(yuǎn)程分支 59
3.5.1 推送 63
3.5.2 跟蹤分支 64
3.5.3 拉取 66
3.5.4 刪除遠(yuǎn)程分支 66
3.6 變基 66
3.6.1 基本的變基操作 66
3.6.2 更有趣的變基操作 69
3.6.3 變基操作的潛在危害 71
3.6.4 只在需要的時(shí)候執(zhí)行變基操作 74
3.6.5 變基操作與合并操作的對(duì)比 75
3.7 小結(jié) 75
第4章 Git服務(wù)器 76
4.1 協(xié)議 76
4.1.1 本地協(xié)議 76
4.1.2 HTTP協(xié)議 78
4.1.3 SSH協(xié)議 79
4.1.4 Git協(xié)議 80
4.2 在服務(wù)器上搭建Git 80
4.2.1 將裸倉庫放置在服務(wù)器上 81
4.2.2 小型團(tuán)隊(duì)配置 82
4.3 生成個(gè)人的SSH公鑰 83
4.4 設(shè)置服務(wù)器 84
4.5 Git守護(hù)進(jìn)程 85
4.6 智能HTTP 87
4.7 GitWeb 88
4.8 GitLab 90
4.8.1 安裝 90
4.8.2 管理 91
4.8.3 基本用法 93
4.8.4 協(xié)作 93
4.9 第三方托管選擇 94
4.10 小結(jié) 94
第5章 分布式Git 95
5.1 分布式工作流 95
5.1.1 集中式工作流 95
5.1.2 集成管理者工作流 96
5.1.3 司令官與副官工作流 97
5.1.4 工作流小結(jié) 97
5.2 為項(xiàng)目做貢獻(xiàn) 98
5.2.1 提交準(zhǔn)則 98
5.2.2 私有小型團(tuán)隊(duì) 100
5.2.3 私有管理團(tuán)隊(duì) 105
5.2.4 派生的公開項(xiàng)目 110
5.2.5 通過電子郵件接受補(bǔ)丁的公開項(xiàng)目 113
5.2.6 小結(jié) 115
5.3 維護(hù)項(xiàng)目 115
5.3.1 使用主題分支 115
5.3.2 應(yīng)用來自電子郵件的補(bǔ)丁 116
5.3.3 檢出遠(yuǎn)程分支 118
5.3.4 確定引入內(nèi)容 119
5.3.5 整合所貢獻(xiàn)的工作結(jié)果 120
5.3.6 為發(fā)布版打標(biāo)簽 125
5.3.7 生成構(gòu)建編號(hào) 126
5.3.8 準(zhǔn)備發(fā)布 126
5.3.9 簡(jiǎn)報(bào) 127
5.4 小結(jié) 127
第6章 GitHub 128
6.1 賬號(hào)設(shè)置與配置 128
6.1.1 SSH訪問 129
6.1.2 頭像 130
6.1.3 電子郵件地址 131
6.1.4 雙因素身份驗(yàn)證 132
6.2 為項(xiàng)目做貢獻(xiàn) 132
6.2.1 派生項(xiàng)目 132
6.2.2 GitHub流程 133
6.2.3 拉取請(qǐng)求的高級(jí)用法 140
6.2.4 Markdown 144
6.3 項(xiàng)目維護(hù) 148
6.3.1 創(chuàng)建新倉庫 148
6.3.2 添加協(xié)作人員 150
6.3.3 管理拉取請(qǐng)求 150
6.3.4 提醒和通知 155
6.3.5 特殊文件 158
6.3.6 項(xiàng)目管理 159
6.4 組織管理 160
6.4.1 組織的基本操作 160
6.4.2 團(tuán)隊(duì) 160
6.4.3 審計(jì)日志 162
6.5 GitHub腳本化 162
6.5.1 鉤子系統(tǒng) 162
6.5.2 GitHub API 166
6.6 小結(jié) 170
第7章 Git工具 171
7.1 選擇修訂版本 171
7.1.1 單個(gè)修訂版本 171
7.1.2 提交范圍 175
7.2 交互式暫存 177
7.2.1 暫存和取消暫存文件 178
7.2.2 暫存補(bǔ)丁 180
7.3 儲(chǔ)藏與清理 181
7.3.1 儲(chǔ)藏工作成果 181
7.3.2 靈活運(yùn)用儲(chǔ)藏 183
7.3.3 從儲(chǔ)藏中創(chuàng)建分支 184
7.3.4 清理工作目錄 184
7.4 簽署工作 186
7.4.1 GPG簡(jiǎn)介 186
7.4.2 簽署標(biāo)簽 186
7.4.3 驗(yàn)證標(biāo)簽 187
7.4.4 簽署提交 187
7.4.5 所有人都得簽署 189
7.5 搜索 189
7.5.1 git grep 189
7.5.2 Git日志搜索 190
7.6 重寫歷史 192
7.6.1 修改最近一次提交 192
7.6.2 修改多個(gè)提交消息 192
7.6.3 重排提交 194
7.6.4 壓縮提交 195
7.6.5 拆分提交 195
7.6.6 超強(qiáng)命令:filter-branch 196
7.7 重置揭秘 197
7.7.1 三棵樹 198
7.7.2 工作流 199
7.7.3 重置的作用 203
7.7.4 利用路徑進(jìn)行重置 205
7.7.5 壓縮 207
7.7.6 檢出 209
7.7.7 小結(jié) 210
7.8 合并的高級(jí)用法 211
7.8.1 合并沖突 211
7.8.2 撤銷合并 220
7.8.3 其他類型的合并 222
7.9 rerere 225
7.10 使用Git調(diào)試 230
7.10.1 文件標(biāo)注 230
7.10.2 二分查找 232
7.11 子模塊 233
7.11.1 開始使用子模塊 233
7.11.2 克隆含有子模塊的項(xiàng)目 235
7.11.3 開發(fā)含有子模塊的項(xiàng)目 236
7.11.4 子模塊技巧 245
7.11.5 子模塊的問題 246
7.12 打包 248
7.13 替換 251
7.14 憑據(jù)存儲(chǔ) 257
7.14.1 底層實(shí)現(xiàn) 258
7.14.2 自定義憑據(jù)緩存 259
7.15 小結(jié) 261
第8章 自定義Git 262
8.1 配置Git 262
8.1.1 客戶端基本配置 262
8.1.2 Git中的配色 265
8.1.3 外部的合并與diff工具 265
8.1.4 格式化與空白字符 268
8.1.5 服務(wù)器配置 270
8.2 Git屬性 270
8.2.1 二進(jìn)制文件 271
8.2.2 關(guān)鍵字?jǐn)U展 273
8.2.3 導(dǎo)出倉庫 276
8.2.4 合并策略 277
8.3 Git鉤子 277
8.3.1 安裝鉤子 277
8.3.2 客戶端鉤子 278
8.3.3 服務(wù)器端鉤子 279
8.4 Git強(qiáng)制策略示例 280
8.4.1 服務(wù)器端鉤子 280
8.4.2 客戶端鉤子 285
8.5 小結(jié) 288
第9章 Git與其他系統(tǒng) 289
9.1 作為客戶端的Git 289
9.1.1 Git與Subversion 289
9.1.2 Git與Mercurial 298
9.1.3 Git與Perforce 305
9.1.4 Git與TFS 317
9.2 遷移到Git 325
9.2.1 Subversion 325
9.2.2 Mercurial 327
9.2.3 Perforce 329
9.2.4 TFS 330
9.2.5 自定義導(dǎo)入工具 331
9.3 小結(jié) 337
第10章 Git內(nèi)幕 338
10.1 底層命令和高層命令 338
10.2 Git對(duì)象 339
10.2.1 樹對(duì)象 341
10.2.2 提交對(duì)象 343
10.2.3 對(duì)象存儲(chǔ) 345
10.3 Git引用 346
10.3.1 HEAD 348
10.3.2 標(biāo)簽對(duì)象 348
10.3.3 遠(yuǎn)程引用 349
10.4 包文件 350
10.5 引用規(guī)格 352
10.5.1 推送引用規(guī)格 354
10.5.2 刪除引用 354
10.6 傳輸協(xié)議 354
10.6.1 啞協(xié)議 355
10.6.2 智能協(xié)議 356
10.6.3 協(xié)議小結(jié) 359
10.7 維護(hù)與數(shù)據(jù)恢復(fù) 359
10.7.1 維護(hù) 359
10.7.2 數(shù)據(jù)恢復(fù) 360
10.7.3 移除對(duì)象 362
10.8 環(huán)境變量 365
10.8.1 全局行為 365
10.8.2 倉庫位置 365
10.8.3 路徑規(guī)格 366
10.8.4 提交 366
10.8.5 網(wǎng)絡(luò) 366
10.8.6 差異與合并 367
10.8.7 調(diào)試 367
10.8.8 雜項(xiàng) 369
10.9 小結(jié) 369
附錄A 其他環(huán)境中的Git 370
附錄B 在應(yīng)用程序中嵌入Git 381
附錄C Git命令 390