前 言
         第1篇 初識Git
         第1章 版本控製的前世和今生/ 2
         1.1 黑暗的史前時代/ 2
         1.2 CVS—開啓版本控製大爆發/ 5
         1.3 SVN—集中式版本控製集大成者/ 7
         1.4 Git—Linus 的第二個偉大作品/ 9
         第2章 愛上 Git 的理由/ 11
         2.1 每日工作備份/ 11
         2.2 異地協同工作/ 12
         2.3 現場版本控製/ 13
         2.4 避免引入輔助目錄/ 15
         2.5 重寫提交說明/ 15
         2.6 想吃後悔藥/ 16
         2.7 更好用的提交列錶/ 17
         2.8 更好的差異比較/ 18
         2.9 工作進度保存/ 18
         2.10 代理SVN提交實現移動式辦公/ 19
         2.11 無處不在的分頁器/ 20
         2.12 快/ 21
         第3章 Git的安裝和使用/ 22
         3.1 在Linux 下安裝和使用 Git/ 22
         3.1.1 包管理器方式安裝/ 22
         3.1.2 從源代碼進行安裝/ 23
         3.1.3 從Git版本庫進行安裝/ 23
         3.1.4 命令補齊/ 25
         3.1.5 中文支持/ 25
         3.2 在Mac OS X 下安裝和使用 Git/ 26
         3.2.1 以二進製發布包的方式安裝/ 26
         3.2.2 安裝 Xcode/ 27
         3.2.3 使用 Homebrew 安裝 Git/ 29
         3.2.4 從Git源碼進行安裝/ 29
         3.2.5 命令補齊/ 30
         3.2.6 其他輔助工具的安裝/ 30
         3.2.7 中文支持/ 31
         3.3 在Windows 下安裝和使用 Git(Cygwin篇)/ 31
         3.3.1 安裝 Cygwin/ 32
         3.3.2 安裝 Git/ 36
         3.3.3 Cygwin 的配置和使用/ 37
         3.3.4 Cygwin 下 Git 的中文支持/ 40
         3.3.5 Cygwin 下 Git 訪問 SSH 服務/ 41
         3.4 Windows 下安裝和使用 Git(msysGit篇)/ 45
         3.4.1 安裝 msysGit/ 46
         3.4.2 msysGit 的配置和使用/ 48
         3.4.3 msysGit中shell環境的中文支持/ 49
         3.4.4 msysGit中Git的中文支持/ 50
         3.4.5 使用 SSH 協議/ 51
         3.4.6 TortoiseGit 的安裝和使用/ 52
         3.4.7 TortoiseGit 的中文支持/ 55
         第2篇 Git獨奏
         第4章 Git 初始化/ 58
         4.1 創建版本庫及第一次提交/ 58
         4.2 思考:為什麼工作區根目錄下有一個 .git 目錄/ 60
         4.3 思考:git config 命令的各參數有何區彆/ 63
         4.4 思考:是誰完成的提交/ 65
         4.5 思考:隨意設置提交者姓名,是否太不安全/ 67
         4.6 思考:命令彆名是乾什麼的/ 68
         4.7 備份本章的工作成果/ 69
         第5章 Git 暫存區/ 70
         5.1 修改不能直接提交嗎/ 70
         5.2 理解 Git 暫存區(stage)/ 76
         5.3 Git Diff 魔法/ 78
         5.4 不要使用 git commit -a/ 81
         5.5 擱置問題,暫存狀態/ 82
         第6章 Git對象/ 83
         6.1 Git對象庫探秘/ 83
         6.2 思考:SHA1 哈希值到底是什麼,是如何生成的/ 88
         6.3 思考:為什麼不用順序的數字來錶示提交/ 90
         第7章 Git 重置/ 93
         7.1 分支遊標master探秘/ 93
         7.2 用 reflog 挽救錯誤的重置/ 95
         7.3 深入瞭解git reset命令/ 96
         第8章 Git 檢齣/ 99
         8.1 HEAD 的重置即檢齣/ 99
         8.2 挽救分離頭指針/ 102
         8.3 深入瞭解 git checkout 命令/ 103
         第9章 恢復進度/ 105
         9.1 繼續暫存區未完成的實踐/ 105
         9.2 使用 git stash/ 108
         9.3 探秘 git stash/ 109
         第10章 Git 基本操作/ 114
         10.1 先來閤個影/ 114
         10.2 刪除文件/ 114
         10.2.1 本地刪除不是真的刪除/ 115
         10.2.2 執行 git rm 命令刪除文件/ 116
         10.2.3 命令git add -u快速標記刪除/ 117
         10.3 恢復刪除的文件/ 118
         10.4 移動文件/ 119
         10.5 一個顯示版本號的 Hello World/ 120
         10.6 使用 git add -i 選擇性添加/ 122
         10.7 Hello World 引發的新問題/ 124
         10.8 文件忽略/ 125
         10.9 文件歸檔/ 129
         第11章 曆史穿梭/ 130
         11.1 圖形工具:gitk/ 130
         11.2 圖形工具:gitg/ 131
         11.3 圖形工具:qgit/ 135
         11.4 命令行工具/ 140
         11.4.1 版本錶示法:git rev-parse/ 141
         11.4.2 版本範圍錶示法:git rev-list/ 144
         11.4.3 瀏覽日誌:git log/ 146
         11.4.4 差異比較:git diff/ 150
         11.4.5 文件追溯:git blame/ 151
         11.4.6 二分查找:git bisect/ 152
         11.4.7 獲取曆史版本/ 156
         第12章 改變曆史/ 157
         12.1 悔棋/ 157
         12.2 多步悔棋/ 159
         12.3 迴到未來/ 161
         12.3.1 時間旅行一/ 162
         12.3.2 時間旅行二/ 167
         12.3.3 時間旅行三/ 171
         12.4 丟棄曆史/ 174
         12.5 反轉提交/ 177
         第13章 Git 剋隆/ 179
         13.1 雞蛋不裝在一個籃子裏/ 179
         13.2 對等工作區/ 180
         13.3 剋隆生成裸版本庫/ 183
         13.4 創建生成裸版本庫/ 184
         第14章 Git庫管理/ 187
         14.1 對象和引用哪裏去瞭/ 187
         14.2 暫存區操作引入的臨時對象/ 189
         14.3 重置操作引入的對象/ 191
         14.4 Git管傢:git-gc/ 193
         14.5 Git管傢的自動執行/ 196
         第3篇 Git和聲
         第15章 Git協議與工作協同/ 200
         15.1 Git 支持的協議/ 200
         15.2 多用戶協同的本地模擬/ 202
         15.3 強製非快進式推送/ 203
         15.4 閤並後推送/ 207
         15.5 禁止非快進式推送/ 208
         第16章 衝突解決/ 210
         16.1 拉迴操作中的閤並/ 210
         16.2 閤並一:自動閤並/ 212
         16.2.1 修改不同的文件/ 212
         16.2.2 修改相同文件的不同區域/ 214
         16.2.3 同時更改文件名和文件內容/ 215
         16.3 閤並二:邏輯衝突/ 217
         16.4 閤並三:衝突解決/ 218
         16.4.1 手工編輯完成衝突解決/ 221
         16.4.2 圖形工具完成衝突解決/ 221
         16.5 閤並四:樹衝突/ 225
         16.5.1 手工操作解決樹衝突/ 227
         16.5.2 交互式解決樹衝突/ 228
         16.6 閤並策略/ 230
         16.7 閤並相關的設置/ 231
         第17章 Git 裏程碑/ 233
         17.1 顯示裏程碑/ 234
         17.2 創建裏程碑/ 236
         17.2.1 輕量級裏程碑/ 237
         17.2.2 帶說明的裏程碑/ 238
         17.2.3 帶簽名的裏程碑/ 239
         17.3 刪除裏程碑/ 242
         17.4 不要隨意更改裏程碑/ 243
         17.5 共享裏程碑/ 243
         17.6 刪除遠程版本庫的裏程碑/ 246
         17.7 裏程碑命名規範/ 247
         第18章 Git 分支/ 253
         18.1 代碼管理之殤/ 253
         18.1.1 發布分支/ 253
         18.1.2 特性分支/ 256
         18.1.3 賣主分支/ 257
         18.2 分支命令概述/ 258
         18.3 “Hello World”開發計劃/ 259
         18.4 基於特性分支的開發/ 260
         18.4.1 創建分支 user1/getopt/ 261
         18.4.2 創建分支 user2/i18n/ 262
         18.4.3 開發者 user1 完成功能開發/ 263
         18.4.4 將 user1/getopt 分支閤並到主綫/ 264
         18.5 基於發布分支的開發/ 265
         18.5.1 創建發布分支/ 266
         18.5.2 開發者 user1 工作在發布分支/ 267
         18.5.3 開發者 user2 工作在發布分支/ 268
         18.5.4 開發者 user2 閤並推送/ 270
         18.5.5 發布分支的提交閤並到主綫/ 271
         18.6 分支變基/ 275
         18.6.1 完成 user2/i18n 特性分支的開發/ 275
         18.6.2 分支 user2/i18n 變基/ 277
         第19章  遠程版本庫/ 284
         19.1 遠程分支/ 284
         19.2 分支追蹤/ 287
         19.3 遠程版本庫/ 290
         19.4 PUSH 和 PULL 操作與遠程版本庫/ 292
         19.5 裏程碑和遠程版本庫/ 294
         19.6 分支和裏程碑的安全性/ 294
         第20章 補丁文件交互/ 296
         20.1 創建補丁/ 296
         20.2 應用補丁/ 297
         20.3 StGit 和 Quilt/ 300
         20.3.1 StGit/ 300
         20.3.2 Quilt/ 304
         第4篇 Git協同模型
         第21章 經典Git協同模型/ 308
         21.1 集中式協同模型/ 308
         21.1.1 傳統集中式協同模型/ 309
         21.1.2 Gerrit 特殊的集中式協同模型/ 310
         21.2 金字塔式協同模型/ 311
         21.2.1 貢獻者開放隻讀版本庫/ 312
         21.2.2 以補丁方式貢獻代碼/ 313
         第22章 Topgit 協同模型/ 314
         22.1 作者版本控製係統的三個裏程碑/ 314
         22.2 Topgit 原理/ 316
         22.3 Topgit 的安裝/ 317
         22.4 Topgit 的使用/ 319
         22.5 用Topgit方式改造Topgit/ 330
         22.6 Topgit 使用中的注意事項/ 334
         第23章 子模組協同模型/ 336
         23.1 創建子模組/ 336
         23.2 剋隆帶子模組的版本庫/ 339
         23.3 在子模組中修改和子模組的更新/ 340
         23.4 隱性子模組/ 343
         23.5 子模組的管理問題/ 345
         第24章 子樹閤並/ 347
         24.1 引入外部版本庫/ 347
         24.2 子目錄方式閤並外部版本庫/ 349
         24.3 利用子樹閤並跟蹤上遊改動/ 351
         24.4 子樹拆分/ 353
         24.5 git-subtree 插件/ 353
         第25章 Android 式多版本庫協同/ 356
         25.1 關於 repo/ 357
         25.2 安裝 repo/ 357
         25.3 repo和清單庫的初始化/ 359
         25.4 清單庫和清單文件/ 360
         25.5 同步項目/ 361
         25.6 建立 Android 代碼庫本地鏡像/ 363
         25.7 repo 的命令集/ 365
         25.8 repo 命令的工作流/ 370
         25.9 好東西不能 Android 獨享/ 371
         25.9.1 repo+Gerrit 模式/ 371
         25.9.2 repo 無審核模式/ 371
         25.9.3 改進的 repo 無審核模式/ 372
         第26章 Git 和 SVN 協同模型/ 378
         26.1 使用 git-svn 的一般流程/ 380
         26.2 git-svn 的奧秘/ 386
         26.2.1 Git 庫配置文件的擴展及分支映射/ 387
         26.2.2 Git工作分支和 Subversion 如何對應/ 388
         26.2.3 其他輔助文件/ 390
         26.3 多樣的 git-svn 剋隆模式/ 390
         26.4 共享 git-svn 的剋隆庫/ 393
         26.5 git-svn 的局限/ 394
         第5篇 搭建Git服務器
         第27章 使用 HTTP 協議/ 398
         27.1 啞傳輸協議/ 398
         27.2 智能 HTTP 協議/ 400
         27.3 Gitweb 服務器/ 401
         27.3.1 Gitweb的安裝/ 402
         27.3.2 Gitweb的配置/ 403
         27.3.3 版本庫的 Gitweb 相關設置/ 404
         27.3.4 即時Gitweb服務/ 405
         第28章 使用 Git 協議/ 406
         28.1 Git 協議語法格式/ 406
         28.2 Git 服務軟件/ 406
         28.3 以 inetd 方式配置運行/ 406
         28.4 以 runit 方式配置運行/ 407
         第29章 使用 SSH 協議/ 409
         29.1 SSH 協議語法格式/ 409
         29.2 服務架設方式比較/ 409
         29.3 關於 SSH 公鑰認證/ 411
         29.4 關於 SSH 主機彆名/ 411
         第30章 Gitolite 服務架設/ 413
         30.1 安裝Gitolite/ 414
         30.1.1 服務器端創建專用賬號/ 414
         30.1.2 Gitolite 的安裝/升級/ 415
         30.1.3 關於 SSH 主機彆名/ 417
         30.1.4 其他的安裝方法/ 418
         30.2 管理 Gitolite/ 419
         30.2.1 管理員剋隆 gitolite-admin 管理庫/ 419
         30.2.2 增加新用戶/ 420
         30.2.3 更改授權/ 422
         30.3 Gitolite 授權詳解/ 423
         30.3.1 授權文件的基本語法/ 423
         30.3.2 定義用戶組和版本庫組/ 424
         30.3.3 版本庫ACL/ 424
         30.3.4 Gitolite 授權機製/ 426
         30.4 版本庫授權案例/ 427
         30.4.1 對整個版本庫進行授權/ 427
         30.4.2 通配符版本庫的授權/ 428
         30.4.3 用戶自己的版本庫空間/ 429
         30.4.4 對引用的授權:傳統模式/ 430
         30.4.5 對引用的授權:擴展模式/ 430
         30.4.6 對引用的授權:禁用規則的使用/ 431
         30.4.7 用戶分支/ 431
         30.4.8 對路徑的寫授權/ 432
         30.5 創建新版本庫/ 432
         30.5.1 在配置文件中齣現的版本庫,即時生成/ 433
         30.5.2 通配符版本庫,管理員通過推送創建/ 434
         30.5.3 直接在服務器端創建/ 435
         30.6 對 Gitolite 的改進/ 435
         30.7 Gitolite 功能拓展/ 436
         30.7.1 版本庫鏡像/ 436
         30.7.2 Gitweb 和 Git daemon 支持/ 438
         30.7.3 其他功能拓展和參考/ 439
         第31章 Gitosis 服務架設/ 441
         31.1 安裝 Gitosis/ 442
         31.1.1 Gitosis 的安裝/ 442
         31.1.2 服務器端創建專用賬號/ 442
         31.1.3 Gitosis 服務初始化/ 443
         31.2 管理 Gitosis/ 443
         31.2.1 管理員剋隆 gitolit-admin 管理庫/ 443
         31.2.2 增加新用戶/ 444
         31.2.3 更改授權/ 446
         31.3 Gitosis 授權詳解/ 447
         31.3.1 Gitosis 默認設置/ 447
         31.3.2 管理版本庫 gitosis-admin/ 447
         31.3.3 定義用戶組和授權/ 448
         31.3.4 Gitweb 整閤/ 449
         31.4 創建新版本庫/ 449
         31.5 輕量級管理的 Git 服務/ 450
         第32章 Gerrit 代碼審核服務器/ 452
         32.1 Gerrit 的實現原理/ 452
         32.2 架設 Gerrit 的服務器/ 456
         32.3 Gerrit 的配置文件/ 461
         32.4 Gerrit 的數據庫訪問/ 462
         32.5 立即注冊為 Gerrit 管理員/ 464
         32.6 管理員訪問 SSH 的管理接口/ 467
         32.7 創建新項目/ 468
         32.8 從已有的 Git 庫創建項目/ 472
         32.9 定義評審工作流/ 473
         32.10 Gerrit 評審工作流實戰/ 477
         32.10.1 開發者在本地版本庫中工作/ 477
         32.10.2 開發者嚮審核服務器提交/ 478
         32.10.3 審核評審任務/ 478
         32.10.4 評審任務沒有通過測試/ 480
         32.10.5 重新提交新的補丁集/ 482
         32.10.6 新修訂集通過評審/ 483
         32.10.7 從遠程版本庫更新/ 485
         32.11 更多 Gerrit 參考/ 486
         第33章 Git 版本庫托管/ 487
         33.1 Github/ 487
         33.2 Gitorious/ 489
         第6篇 遷移到Git
         第34章 CVS版本庫到Git的遷移/ 492
         34.1 安裝cvs2svn(含 cvs2git)/ 492
         34.1.1 Linux下cvs2svn的安裝/ 492
         34.1.2 Mac OS X 下 cvs2svn 的安裝/ 493
         34.2 版本庫轉換的準備工作/ 494
         34.2.1 版本庫轉換注意事項/ 494
         34.2.2 文件名亂碼問題/ 494
         34.2.3 提交說明亂碼問題/ 494
         34.3 版本庫轉換/ 496
         34.3.1 配置文件解說/ 496
         34.3.2 運行cvs2git完成轉換/ 500
         34.4 遷移後的版本庫檢查/ 501
         第35章 更多版本控製係統的遷移/ 502
         35.1 SVN版本庫到Git的遷移/ 502
         35.2 Hg 版本庫到Git的遷移/ 503
         35.3 通用版本庫遷移/ 505
         35.4 Git 版本庫整理/ 511
         35.4.1 環境變量過濾器/ 513
         35.4.2 樹過濾器/ 513
         35.4.3 暫存區過濾器/ 513
         35.4.4 父節點過濾器/ 514
         35.4.5 提交說明過濾器/ 514
         35.4.6 提交過濾器/ 515
         35.4.7 裏程碑名字過濾器/ 516
         35.4.8 子目錄過濾器/ 516
         第7篇 Git的其他應用
         第36章 etckeeper/ 518
         36.1 安裝 etckeeper/ 518
         36.2 配置 etckeeper/ 519
         36.3 使用 etckeeper/ 519
         第37章 Gistore/ 520
         37.1 Gistore 的安裝/ 520
         37.1.1 軟件依賴/ 520
         37.1.2 從源碼安裝 Gistore/ 521
         37.1.3 用 easy_install 安裝/ 521
         37.2 Gistore 的使用/ 522
         37.2.1 創建並初始化備份庫/ 522
         37.2.2 Gistore 的配置文件/ 523
         37.2.3 Gistore 的備份項管理/ 524
         37.2.4 執行備份任務/ 525
         37.2.5 查看備份日誌/ 525
         37.2.6 查看及恢復備份數據/ 527
         37.2.7 備份迴滾及設置/ 528
         37.2.8 注冊備份任務彆名/ 529
         37.2.9 自動備份:crontab/ 529
         37.3 Gistore 雙機備份/ 529
         第38章 補丁中的二進製文件/ 531
         38.1 Git 版本庫中二進製文件變更的支持/ 531
         38.2 對非 Git 版本庫中二進製文件變更的支持/ 535
         38.3 其他工具對 Git 擴展補丁文件的支持/ 536
         第39章 雲存儲/ 538
         39.1 現有雲存儲的問題/ 538
         39.2 Git 式雲存儲暢想/ 539
         第8篇 Git雜談
         第40章 跨平颱操作 Git/ 542
         40.1 字符集問題/ 542
         40.2 文件名大小寫問題/ 543
         40.3 換行符問題/ 545
         第41章 Git 的其他特性/ 549
         41.1 屬性/ 549
         41.1.1 屬性定義/ 549
         41.1.2 屬性文件及優先級/ 550
         41.1.3 常用屬性介紹/ 552
         41.2 鈎子和模闆/ 557
         41.2.1 Git 鈎子/ 557
         41.2.2 Git 模闆/ 562
         41.3 稀疏檢齣和淺剋隆/ 563
         41.3.1 稀疏檢齣/ 563
         41.3.2 淺剋隆/ 566
         41.4 嫁接和替換/ 568
         41.4.1 提交嫁接/ 568
         41.4.2 提交替換/ 568
         41.5 Git 評注/ 570
         41.5.1 評注的奧秘/ 570
         41.5.2 評注相關命令/ 573
         41.5.3 評注相關配置/ 574
         第9篇 附錄
         附錄A  Git 命令索引/ 576
         A.1 常用的Git命令/ 576
         A.2 對象庫操作相關命令/ 578
         A.3 引用操作相關命令/ 578
         A.4 版本庫管理相關命令/ 579
         A.5 數據傳輸相關命令/ 579
         A.6 郵件相關命令/ 580
         A.7 協議相關命令/ 580
         A.8 版本庫轉換和交互相關命令/ 581
         A.9 閤並相關的輔助命令/ 581
         A.10 雜項/ 582
         附錄B Git 與 CVS 麵對麵/ 583
         B.1 麵對麵訪談錄/ 583
         B.2 Git  和CVS 命令對照/ 585
         附錄C Git 與 SVN 麵對麵/ 587
         C.1 麵對麵訪談錄/ 587
         C.2  Git 和SVN 命令對照/ 589
         附錄D Git 與 Hg 麵對麵/ 592
         D.1 麵對麵訪談錄/ 592
         D.2 Git和Hg  命令對照/ 593
      · · · · · ·     (
收起)