Git是一款免費、開源的分布式版本控制系統(tǒng),也是當今流行的版本控制系統(tǒng)之一,在眾多的項目開發(fā)中普遍使用,得到程序員和工程師的歡迎和喜愛。
本書是一本面向專業(yè)開發(fā)者的圖書。全書內容分為26章,從基礎概念講起,陸續(xù)向讀者介紹了有關Git的各種操作和使用技巧,不僅將提交、版本庫、分支、合并等命令講解到位,還介紹了工作流、基于分支的開發(fā)、二分法排錯、發(fā)行版交付、項目的拆分與合并、項目的遷移等內容。
本書適合從事項目開發(fā)的專業(yè)人士閱讀,想要學習Git的讀者也可以選用。
Git 是當今流行版本控制系統(tǒng)。本書并不偏重理論介紹,也不面面俱到,而是一本學習Git 的實用指南。本書首先介紹了Git 的基礎知識,然后關注于敏捷開發(fā),并給出工作流展示了解決現(xiàn)實問題所需的命令和選項。
本書包括以下內容:
● 入門教程:重點展示每一條重要Git 命令的用法。
● 技術介紹:介紹如何使用Git 處理一個團隊開發(fā)中的各項事務,用大量的實例演示那些主要Git 命令的使用方式,并且解釋其中的基本概念,如提交、版本庫、分支、合并、重訂等,幫助讀者了解Git 的具體工作方式。
● 工作流:工作流是指在項目中使用Git 的實用場景,例如創(chuàng)建一個項目的發(fā)行版等。對于每個工作流,本書從以下幾項來描述其目標場景。
解決的是什么問題;
需要增加什么必要條件;
解決問題的人以及解決的時間。
● “分步”指令:這是一組常用命令序列。例如,移動某個分支就屬于一條既定的“分步”指令。
本書適合于從事軟件開發(fā)工作,想要掌握Git 工具的讀者閱讀參考。
第1章 基本概念 1
1.1 分布式版本控制,有何過人之處 1
1.2 版本庫,分布式工作的基礎所在 3
1.3 分支的創(chuàng)建與合并很簡單 5
1.4 本章小結 6
第2章 入門 8
2.1 準備Git環(huán)境 8
2.2 第一個Git項目 8
2.2.1 創(chuàng)建版本庫 9
2.2.2 首次提交 9
2.2.3 檢查狀態(tài) 10
2.2.4 提交修改 11
2.2.5 顯示歷史 11
2.3 Git的協(xié)作功能 12
2.3.1 克隆版本庫 12
2.3.2 從另一版本庫中獲取修改 12
2.3.3 從任意版本庫中取回修改 14
2.3.4 創(chuàng)建共享版本庫 14
2.3.5 用push命令上載修改 15
2.3.6 Pull命令:取回修改 16
2.4 本章小結 17
第3章 提交究竟是什么 18
3.1 訪問權限與時間戳 18
3.2 add命令與commit命令 19
3.3 再談提交散列值 19
3.4 提交歷史 20
3.5 一種略有不同的提交查看方法 21
3.6 同一項目的多部不同歷史 21
3.6.1 部分輸出:-n 22
3.6.2 格式化輸出:--format、
--oneline 23
3.6.3 統(tǒng)計修改信息:--stat、
--shortstat 23
3.6.4 日志選項:--graph 23
3.7 本章小結 24
第4章 多次提交 25
4.1 status命令 25
4.2 存儲在暫存區(qū)中的快照 28
4.3 怎樣的修改不該被提交 28
4.4 用.gitignore忽略非版本控制文件 30
4.5 儲藏 31
4.6 本章小結 31
第5章 版本庫 33
5.1 一種簡單而高效的存儲系統(tǒng) 33
5.2 存儲目錄:Blob與Tree 34
5.3 相同數(shù)據(jù)只存儲一次 35
5.4 壓縮相似內容 35
5.5 當不同文件的散列值相同時,
情況會很糟糕嗎 35
5.6 提交對象 36
5.7 提交歷史中的對象重用 36
5.8 重命名、移動與復制 37
5.9 本章小結 39
第6章 分支 40
6.1 并行式開發(fā) 40
6.2 修復舊版本中的bug 41
6.3 分支 41
6.4 泳道 42
6.5 當前活躍分支 42
6.6 重置分支指針 44
6.7 刪除分支 44
6.8 清理提交對象 45
6.9 本章小結 45
第7章 合并分支 46
7.1 合并過程中發(fā)生的事 47
7.2 沖突 48
7.3 編輯沖突 48
7.4 沖突標志 49
7.5 解決編輯沖突 50
7.6 內容沖突又是什么呢 51
7.7 快進合并 52
7.8 第一父級提交歷史 53
7.9 棘手的合并沖突 54
7.10 無論如何,終會有可行的方式 55
7.11 本章小結 56
第8章 通過變基凈化歷史 57
8.1 工作原理:復制提交 57
8.2 避免“鉆石鏈” 58
8.3 什么情況下會遇到?jīng)_突呢 59
8.4 移植分支 60
8.5 執(zhí)行變基后原提交的情況 61
8.6 為什么提交的原件與副本存在
于同一版本庫中是有問題的 61
8.7 撿取 62
8.8 本章小結 62
第9章 版本庫間的交換 64
9.1 克隆版本庫 64
9.2 如何告知Git其他版本庫的位置 65
9.3 給別處的版本庫起個名字 65
9.4 獲取數(shù)據(jù) 66
9.5 遠程跟蹤分支:監(jiān)控其他分支 67
9.6 利用本地分支操作別處的版本庫 68
9.7 Pull = Fetch + Merge 69
9.8 討厭鉆石鏈的人:請用--rebase
選項 69
9.9 push:pull的反面 69
9.10 命名分支 71
9.11 本章小結 72
第10章 版本標簽 73
10.1 創(chuàng)建標簽 73
10.2 當前究竟存在哪些標簽 74
10.3 打印標簽的散列值 74
10.4 將標簽添加到日志輸出中 74
10.5 究竟在哪個版本里呢 75
10.6 如何修改標簽呢 75
10.7 當我們需要一個浮動標簽時 75
10.8 本章小結 75
第11章 版本庫之間的依賴 77
11.1 與子模塊之間的依賴 77
11.2 與子樹之間的依賴 82
11.3 本章小結 85
第12章 技巧 86
12.1 不要慌,我們有一個引用日志 86
12.2 忽略臨時性的本地修改 87
12.3 檢查對文本文件的修改 88
12.4 別名—Git命令的快捷方式 88
12.5 為臨時指向的提交創(chuàng)建分支 89
12.6 將提交移動到另一分支 89
第13章 工作流簡介 91
13.1 我們會在什么時候使用這些
工作流呢 91
13.1.1 項目開始階段 91
13.1.2 項目開發(fā)階段 92
13.1.3 項目交付階段 92
13.1.4 項目重構階段 92
13.2 工作流的結構 93
13.2.1 條目 93
13.2.2 概述 93
13.2.3 使用要求 93
13.2.4 工作流簡述 93
13.2.5 執(zhí)行過程及其實現(xiàn) 94
13.2.6 何不換一種做法 94
第14章 項目設置 95
14.1 概述 96
14.2 使用要求 96
14.3 工作流簡述:設置項目 97
14.4 執(zhí)行過程及其實現(xiàn) 98
14.4.1 基于項目目錄創(chuàng)建一個
新的版本庫 98
14.4.2 以文件訪問的方式
共享版本庫 101
14.4.3 用Git daemon來共享
版本庫 102
14.4.4 用HTTP協(xié)議來共享
版本庫 103
14.4.5 用SSH協(xié)議來共享
版本庫 106
14.5 何不換一種做法 107
何不放棄推送操作 107
14.6 純拉取操作 108
第15章 相同分支上的開發(fā) 109
15.1 概述 110
15.2 使用要求 111
15.3 工作流簡述:相同分支上
的開發(fā) 111
15.4 執(zhí)行過程及其實現(xiàn) 111
在master分支上操作 111
15.5 何不換一種做法 114
何不用變基來代替合并 114
第16章 基于特性分支的開發(fā) 116
16.1 概述 116
16.2 使用要求 117
16.3 工作流簡述:基于特性分支
的開發(fā) 118
16.4 執(zhí)行過程及其實現(xiàn) 118
16.4.1 創(chuàng)建特性分支 118
16.4.2 在master分支上集成
某一特性 119
16.4.3 將master分支上所發(fā)生的修改傳遞給特性分支 124
16.5 何不換一種做法 125
16.5.1 何不直接在部分交付后
的合并版本上繼續(xù)
后續(xù)工作 125
16.5.2 何不到發(fā)行版即將成型時
再集成特性分支 126
16.5.3 何不交換特性分支之間
的提交 126
第17章 二分法排錯 130
17.1 概述 130
17.2 使用要求 131
17.3 工作流簡述:二分法排錯 131
17.4 執(zhí)行過程及其實現(xiàn) 131
17.4.1 用二分法人工排錯 132
17.4.2 用二分法自動排錯 134
17.5 何不換一種做法 138
何不用合并操作將測試腳本添加到
舊提交中去 138
第18章 基于構建服務器的工作 139
18.1 概述 139
18.2 使用要求 140
18.3 工作流簡述:基于構建服務器
的工作 140
18.4 執(zhí)行過程及其實現(xiàn) 141
18.4.1 預備構建服務器 141
18.4.2 構建服務器上的Git 142
18.4.3 比對本地開發(fā)版本
與最后成功構建版本
之間的差異 145
18.4.4 基于構建歷史的排錯 146
18.5 何不換一種做法 149
18.5.1 何不使用標簽 149
18.5.2 何不將構建歷史放在中央
版本庫中 149
第19章 發(fā)行版交付 150
19.1 概述 150
19.2 使用要求 151
19.3 工作流簡述:“發(fā)行版
交付” 152
19.4 執(zhí)行過程及其實現(xiàn) 152
19.4.1 預備階段:創(chuàng)建stable
分支 152
19.4.2 預備并創(chuàng)建發(fā)行版 154
19.4.3 創(chuàng)建補丁 157
19.5 何不換一種做法 159
19.5.1 為什么不能只用標簽 159
19.5.2 何不干脆不用標簽 159
19.5.3 為什么不能用快進式
合并 160
19.5.4 為什么不直接在stable分支
上實現(xiàn)補丁 160
第20章 拆分大項目 161
20.1 概述 161
20.2 使用要求 163
20.3 工作流簡述:“拆分大項目” 163
20.4 執(zhí)行過程及其實現(xiàn) 163
20.4.1 拆分模塊版本庫 163
20.4.2 將拆分出的模塊作為外部
版本庫集成 165
20.5 何不換一種做法 166
20.5.1 何不采用一個全新
的版本庫 166
20.5.2 為什么不采用--subdirectory
-filter選項 167
第21章 合并小型項目 168
21.1 概述 168
21.2 使用要求 169
21.3 工作流簡述:“合并小項目” 170
21.4 執(zhí)行過程及其實現(xiàn) 170
合并版本庫 170
21.5 何不換一種做法 172
為什么不直接合并,跳過創(chuàng)建
項目文件目錄 172
第22章 外包長歷史記錄 173
22.1 概述 173
22.2 使用要求 174
22.3 工作流簡述:
“外包長歷史記錄” 175
22.4 執(zhí)行過程及其實現(xiàn) 175
22.4.1 外包項目歷史 175
22.4.2 鏈接到當前活動
版本庫 178
22.5 何不換一種做法 179
為什么不獲取檔案版本庫
(而是采用鏈接) 179
第23章 與其他版本控制系統(tǒng)
并行使用 180
23.1 概述 180
23.2 使用要求 182
23.3 工作流簡述:“與其他版本控制
系統(tǒng)并行使用” 182
23.4 執(zhí)行過程及其實現(xiàn) 182
23.4.1 初始部署版本庫 183
23.4.2 得到中央版本控制管理中
的更新修改 184
23.4.3 將修改提交傳輸?shù)街醒氡?br />
版控制系統(tǒng) 185
23.5 何不換一種做法 188
為什么不選擇一個Git版本庫 188
第24章 遷移到Git 189
24.1 概述 189
24.2 使用要求 190
24.3 工作流簡述:“遷移到Git” 190
24.4 執(zhí)行過程及其實現(xiàn) 190
24.4.1 學習和練習使用Git 190
24.4.2 做出遷移的決定 191
24.4.3 找到分支 193
24.4.4 準備版本庫 194
24.4.5 獲取分支 195
24.4.6 以懷疑的態(tài)度使用接受
這個版本庫 197
24.4.7 清理工作 199
24.5 何不換一種做法 199
24.5.1 為什么不接收整個項目
歷史 199
24.5.2 是否可以沒有遺產(chǎn)
分支 199
24.5.3 沒有雙版本控制工作區(qū)
可以嗎 200
第25章 還有一些其他任務 201
25.1 交互式變基操作——完善
歷史記錄 201
25.2 補丁處理 202
25.3 用E-mail發(fā)送補丁 202
25.4 打包操作——離線模式下的
推送操作 203
25.5 創(chuàng)建歸檔 203
25.6 Git的圖形化工具 204
25.7 與Subversion的協(xié)作 205
25.8 命令別名 205
25.9 標注提交 206
25.10 用鉤子擴展Git 206
25.11 將版本庫托管到Github上 207
第26章 Git的缺點 208
26.1 高復雜度 208
26.2 復雜的子模塊 209
26.3 大型二進制文件的資源消耗 210
26.4 版本庫只能作為一個整體
被處理 211
26.5 版本庫只能作為整體被授權 211
26.6 能用于歷史分析的圖形化
工具偏弱 212