當(dāng)多個人共同參與一個軟件項(xiàng)目時,就需要一個系統(tǒng)以可追溯的方式存儲 所有的更改。這樣的版本控制系統(tǒng)還必須讓所有開發(fā)人員都能訪問整個項(xiàng)目, 以使每位程序員都能了解其他人員最近的工作內(nèi)容、嘗試他人的代碼,并測試 這些代碼與自己所做更改之間的交互情況。
在過去,曾有過許多版本控制系統(tǒng),如 Concurrent Versions System(CVS)、 Apache Subversion(SVN)或 Microsoft Visual SourceSafe(VSS),但是,在過去 的十年里,Git 已成為事實(shí)上的標(biāo)準(zhǔn)版本控制系統(tǒng)。
GitHub 網(wǎng)絡(luò)平臺在這一成功中發(fā)揮了重要作用,它極大地簡化了 Git 的 學(xué)習(xí)和使 用。當(dāng) 然,GitHub 并非唯一的 Git 平臺,主要的競爭對手還包括 GitLab、Azure DevOps Services 和 Bitbucket。
人人都在用,卻沒人懂它
盡管 Git 備受推崇,但它顯然是由專業(yè)人士為專業(yè)人士設(shè)計的,你需要牢 記以下幾點(diǎn):
- 達(dá)到一個目標(biāo)有多種方法。對于已經(jīng)熟悉 Git 的讀者來說,這個觀點(diǎn)很 有用,但如果你剛開始學(xué)習(xí) Git,這種多樣性可能會讓你感到困惑。
- Git 開源項(xiàng)目的文檔豐富。在手冊頁和網(wǎng)站上,每一個 git 命令和每一種 可能的應(yīng)用都以極其細(xì)致的方式進(jìn)行了說明,并且考慮了很多可能的特殊情 況,這些可以幫助你快速地上手。
- Git 一些術(shù)語有多種含義,而且容易混淆的子命令可能會執(zhí)行截然不同 的任務(wù)。一些術(shù)語的含義會根據(jù)上下文的不同而有所不同,或者在文檔中的使 用不一致。
我們得坦白,盡管我們已經(jīng)使用 Git 多年,但在寫這本書的過程中還是學(xué) 到了很多!
關(guān)于本書
我們可以以極簡的方式使用 Git,但是,日常操作中的微小偏差也可能導(dǎo) 致令人驚訝且通常難以理解的副作用或錯誤。
每個 Git 初學(xué)者都經(jīng)歷過那種感受:當(dāng)一個 git 命令返回一條難以理解的 錯誤信息時,你會嚇出一身冷汗,懷疑自己是否剛剛永久性地破壞了所有開 發(fā)人員的存儲庫,并試圖找到合適的人來用正確的命令說服 Git 繼續(xù)工作。因 此,不深入學(xué)習(xí) Git 是沒有用的,只有充分了解 Git 的工作原理,你才能有信 心干凈利落地解決合并沖突或其他問題。
同時,我們也知道,如果我們不優(yōu)先考慮基本功能,這本書就無法發(fā)揮作 用。這本書內(nèi)容很多,但它并不是 Git 的全包式指南,我們不可能考慮每一種 特殊情況或介紹每一個 Git 子命令。我們寫這本書就是為了把真實(shí)有用的東西 挑出來,去掉那些不實(shí)的部分。本書分為以下 12 章。
在第 1 章進(jìn)行簡短介紹之后,我們將在第 2 章至第 4 章中介紹 Git 的使 用,將重點(diǎn)介紹在命令級別使用 Git,并簡要討論 GitHub 或其他用戶界面 (UI)等平臺。對于 Git 初學(xué)者,我們建議先閱讀前 4 個章節(jié)。即使你有一些 Git 經(jīng)驗(yàn),也一定要花幾個小時閱讀第 3 章,并在測試存儲庫中嘗試我們介紹 的一些技術(shù)(合并、變基等)。
接下來的 3 個章節(jié)介紹了最重要的 Git 平臺。特別是對于復(fù)雜的項(xiàng)目,這 些平臺提供了有用的附加功能,例如執(zhí)行自動測試或?qū)崿F(xiàn)持續(xù)集成(CI)。當(dāng) 然,我們也會向你展示如何托管自己的 Git 存儲庫。使用 GitLab、Gitea 或 Gitolite,可以相對容易地實(shí)現(xiàn)這一目標(biāo)。
然后,我們將從基礎(chǔ)轉(zhuǎn)向?qū)嵺`。在第 8 章中,我們將描述使用 Git 引導(dǎo)眾 多開發(fā)人員走上有序路徑(分支)的流行模式。第 9 章重點(diǎn)關(guān)注 Git 的高級功 能,如鉤子、子模塊、子樹和雙重身份驗(yàn)證。第 10 章將展示如何在 Linux 系 統(tǒng)上使用 Git 管理版本配置文件(dotfiles)或整個 /etc 目錄,如何將項(xiàng)目從 SVN 遷移到 Git,以及如何使用 Git 和 Hugo 快速輕松地實(shí)現(xiàn)一個簡單的網(wǎng)站。
第 11 章將幫助你解決難以理解的錯誤信息所帶來的僵局。在這一章中,你還 會找到實(shí)現(xiàn)特殊請求的說明,例如從 Git 存儲庫中刪除大文件或僅對選定文件 執(zhí)行合并操作。
在本書的結(jié)尾,第 12 章簡要總結(jié)了最重要的 git 命令及其選項(xiàng)。 或許你只想知道足夠多的內(nèi)容,以便能夠準(zhǔn)確地使用 Git,進(jìn)而推動項(xiàng)目的進(jìn)展。我們理解這種動機(jī),但是,我們?nèi)匀粡?qiáng)烈建議您比原計劃多花幾個小 時來系統(tǒng)地了解 Git。
我們向你保證,你閱讀本書之后一定會感覺物有所值。雖然,你當(dāng)前的關(guān) 注點(diǎn)主要在于項(xiàng)目,但 Git 技能是作為一名開發(fā)者在未來許多項(xiàng)目中都需要掌 握的長期核心競爭力。
祝你在使用 Git 的過程中取得圓滿成功!
第 1 章 Git 十分鐘入門 1
1.1 Git 是什么 1
1.2 從 GitHub 下載軟件 3
1.3 支持 Git 的編程 5
第 2 章 學(xué)以致用 9
2.1 安裝 git 命令 9
2.2 設(shè)置 GitHub 賬戶和存儲庫 17
2.3 使用 git 命令 22
2.4 身份驗(yàn)證 36
2.5 以有趣的方式學(xué)習(xí) Git(Githug) 46
2.6 集成開發(fā)環(huán)境(IDE)和編輯器 48
2.7 向第三方 GitHub 項(xiàng)目貢獻(xiàn) 55
2.8 同步與備份 57
第 3 章 Git 的基本原則 59
3.1 術(shù)語 59
3.2 Git 數(shù)據(jù)庫 63
3.3 提交 67
3.4 提交撤銷 74
3.5 分支 83
3.6 合并 88
3.7 暫存 96
3.8 遠(yuǎn)程倉庫 97
3.9 解決合并沖突 107
3.10 變基 115
3.11 標(biāo)簽 120
3.12 提交引用 125
3.13 Git 內(nèi)部細(xì)節(jié) 130
第 4 章 Git 倉庫中的數(shù)據(jù)分析 134
4.1 搜索提交 134
4.2 搜索文件 145
4.3 搜索錯誤 150
4.4 統(tǒng)計與可視化 152
第 5 章 GitHub 157
5.1 拉取請求 158
5.2 操作 162
5.3 包管理器 170
5.4 自動安全掃描 176
5.5 GitHub 其他功能 179
5.6 GitHub 命令行界面 185
5.7 Codespaces 188
第 6 章 GitLab 190
6.1 本地安裝與云端 191
6.2 安裝 191
6.3 第一個項(xiàng)目 198
6.4 流水線 200
6.5 合并請求 209
6.6 Web IDE 211
6.7 Gitpod 212
第 7 章 Azure DevOps、Bitbucket、Gitea 和 Gitolite 215
7.1 Azure DevOps 215
7.2 Bitbucket 220
7.3 Gitea 221
7.4 Gitolite 231
第 8 章 工作流程 234
8.1 團(tuán)隊(duì)操作指南 234
8.2 獨(dú)立開發(fā) 235
8.3 團(tuán)隊(duì)的功能分支 237
8.4 合并 / 拉取請求 244
8.5 長期運(yùn)行的分支:Gitflow 247
8.6 基于主干的開發(fā) 252
8.7 選擇哪種工作流程更合適? 255
第 9 章 工作技巧 257
9.1 鉤子 257
9.2 簡潔的提交信息 261
9.3 子模塊和子樹 267
9.4 Bash 和 Zsh 277
9.5 雙重身份驗(yàn)證 279