一、關於Git
1.1 簡介
Git 是一個開源的分散式版本控制系統,由 Linus Torvalds 於 2005 年建立,最初是為了更好地管理 Linux 核心開發而設計。
Git用於跟蹤計算機檔案的變化,特別是原始碼檔案。它允許多個開發者同時合作開發軟體專案,同時保留完整的版本歷史,確保程式碼的穩定性和可追溯性。
在 2005 年,Linus Torvalds 迫切需要一個新的版本控制系統來維護 Linux 核心的開發。於是他花了一個星期的時間,從頭開始編寫了一個革命性的新系統,並將其命名為 Git。二十年之後,該平臺成為了這個競爭激烈領域裡面當之無愧的領導者。
在全球範圍內,大量的初創企業、集體企業和跨國公司,包括谷歌和微軟,使用 Git 來維護它們軟體專案的原始碼。它們中有些公司擁有自己的 Git 專案,有些公司則透過商業託管公司使用 Git,比如 GitHub(成立於 2007 年),Bitbucket(成立於 2010 年)和 GitLab(成立於 2011 年)。其中最大的 GitHub 擁有 4000 萬註冊開發者 並在 2018 年被微軟以 75 億美元的天價收購。
Git 的吸引力之一在於它是開源的(就像 Linux 和 Android 那樣)。但是還有其它開源的 VSC,其中包括協作版本系統(CVS)、SVN、Mercurial 和 Monotone,因此單憑這一點並不足以解釋它的優點。
關於 Git 市場主導地位的最好體現是 Stack Overflow 對開發人員的調查。調查結果顯示,2018 年 74289 名受訪者中有 88.4% 使用了 Git(高於 2015 年的 69.3%)。最接近的競爭對手是 Subversion,普及率為 16.6%(低於 36.9%);Team Foundation 版本控制,從 2015 年的 12.2% 降為 11.3%;Mercurial 普及率為 3.7%(低於 7.9%)。事實上,Git 的優勢如此之大,以至於 Stack Overflow 的資料科學家都懶得在 2019 的調查中提出這個問題。
開源人員使用什麼來進行原始碼控制?
| 2018 | 2015 |
| ---------------------- | ---------------------- |
| Git: 88.4% | Git: 69.3% |
| Subversion: 16.6% | Subversion: 36.9% |
| Team Foundation: 11.3% | Team Foundation: 12.2% |
| Mercurial: 3.7% | Mercurial: 7.9% |
| | CVS: 4.2% |
| | Perforce: 3.3% |
| 74,298 受訪者 | 16,694 受訪者 |
資料來源:Stack Overflow 2018/2015 開發者調查報告
1.2 發展
Git 的發展歷程可以追溯到 2005 年,其誕生與當時的一個開源專案——Linux 核心的版本控制問題密切相關。
1. 背景:Linux 核心的版本控制問題
在 Git 誕生之前,Linux 核心專案使用的是一個叫做 BitKeeper 的分散式版本控制系統。BitKeeper 是一種商業軟體,免費提供給開源專案使用,但隨著時間的推移,BitKeeper 與開源社群的關係變得緊張。2005 年,BitKeeper 的公司決定撤回對開源社群的免費使用授權,這讓 Linux 核心的開發者面臨了沒有合適工具的困境。
大家都知道,Linux 核心是開源的,參與者眾多,到目前為止,共有兩萬多名開發者給 Linux Kernel 提交過程式碼。
但在 1991 年到 2002 年期間,Linus Torvalds(Linux 核心的創始人)作為專案的管理員並沒有藉助任何配置管理工具,而是以手工方式透過 patch 來合併大家提交的程式碼。
倒不是說 Linus 喜歡手工處理,而是因為他對程式碼版本管理工具非常挑剔,無論是商用的 clearcase,還是開源的 CVS、SVN 都入不了他的法眼。
直到 2002 年,Linus 才相中了一款分散式版本控制系統 BitKeeper,雖然是商用的,但 BitKeeper 願意讓 Linux 社群免費使用,這讓 Linus 非常開心和滿意。
時間來到 2005 年,由於 BitKeeper 提供的預設介面不能滿足 Linux 社群使用者的全部需要,一位開發者在未經允許的情況下反編譯了 BitKeeper 並利用了未公開的介面,於是 BitKeeper 的著作權擁有者Larry McVoy(拉里·麥沃伊)就氣憤地收回了 Linux 社群免費使用的權力。
2. Git 的誕生 (2005 年)
為了應對這個問題,Linus Torvalds(Linux 核心的創始人)決定開發一個新的版本控制系統。
Linus Torvalds
Torvalds 的目標是:
- 高效地管理大型專案(如 Linux 核心)。
- 提供分散式架構,支援多個開發者的協作。
- 確保效能優越,能夠快速處理大量的資料。
- 強調程式碼歷史的完整性,避免丟失歷史資料。
結果,令人意想不到的是,Linus 只用了一個星期就用 C語言完成了第一個版本,嗯。。神就是神。並且給這個版本起了一個略帶嘲諷意味的名字——Git(在英式英語俚語中表示“不愉快的人”)。
Torvalds 將它命為 Git 的原因有很多種說法,但實際上他只是喜歡這個詞,這是他從披頭士的歌曲《I’m So Tired》(第二節)中獲得靈感。
原始碼的自述檔案有進一步的闡述:
The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your way)
如果選歷史上最偉大的一次 Git 程式碼提交,那一定是這 Git 工具專案本身的第一次程式碼提交。這次程式碼提交無疑是開創性的,如果說 Linux 專案促成了開源軟體的成功並改寫了軟體行業的格局,那麼 Git 則是改變了全世界開發者的工作方式和寫作方式。
那麼,Torvalds 對 Git 的巨大成功感到驚訝嗎? “如果我說我能看到它即將成功,那絕對是在撒謊。我當然沒有。但是 Git 確實把所有的基礎都做對了。有什麼事情可以做得更好嗎?當然。但總的來說,Git 確實解決了一些與 VCS 有關的真正困難的問題。” 他說。
2005年4月7日,Linus Torvalds 宣佈了 Git 的首次釋出。Git 是一個分散式版本控制系統,其設計和實現從一開始就以高效性和靈活性為目標。
3. 初期的發展:從 Linux 核心到廣泛採用
- 2005 年:Git 釋出後,首先應用於 Linux 核心的開發。Linux 核心開發者和其他開源專案很快就開始採用 Git。
- 2005-2006 年:Git 在開源社群中逐漸獲得了認可,成為管理大型專案的理想工具。與此同時,Git 的功能逐漸完善。
4. GitHub 的誕生 (2008 年)
GitHub 的出現極大推動了 Git 的普及。GitHub 是一個基於 Git 的託管平臺,提供了一個易於使用的 Web 介面和協作功能,簡化了 Git 的使用,併為開源專案提供了一個集中的託管和版本管理服務。2008 年,GitHub 成立,並迅速成為 Git 使用者和開源專案的主要平臺。
- GitHub 引入了 Pull Requests(拉取請求)等社交編碼功能,允許開發者輕鬆地提出程式碼修改建議並進行討論。這一功能使 Git 在團隊協作和開源專案中更具吸引力。
5. Git 的廣泛普及
隨著 GitHub 和其他平臺(如 GitLab、Bitbucket)的興起,Git 被越來越多的開發者和團隊採用,成為開源專案和企業內部專案的標準版本控制工具。Git 支援分散式開發的特點,使得它特別適合現代軟體開發中的分支管理、協作開發和持續整合等工作流。
6. Git 生態系統的發展
隨著 Git 的普及,圍繞 Git 形成了豐富的工具和生態系統:
- GitLab:另一個流行的 Git 託管平臺,支援 Git 的同時提供 CI/CD(持續整合/持續交付)功能。
- Bitbucket:最初以支援 Mercurial 版本控制為主,後來轉向了 Git,併成為 Atlassian 系列產品的一部分。
- GitKraken:為 Git 提供了圖形化介面,便於開發者操作和管理。
此外,許多 IDE 和文字編輯器(如 Visual Studio Code、JetBrains 的 IntelliJ IDEA 等)也整合了 Git 支援,進一步促進了其普及。
7. Git 的重要特性和發展
Git 逐步增加了許多新功能和最佳化,以下是一些重要特性:
- Git LFS(Large File Storage) :支援大檔案的版本控制。
- Git Submodules:支援將一個 Git 倉庫巢狀到另一個 Git 倉庫中,適用於多倉庫管理。
- Git Flow:一種流行的 Git 工作流,特別適用於團隊開發和釋出管理。
- 效能最佳化:Git 不斷最佳化其在大規模專案中的效能,增強了處理速度和效率。
8. Git 的未來
Git 已經成為全球最廣泛使用的版本控制工具,未來它可能繼續增強與現代開發工具和工作流的整合,如 DevOps、持續整合/持續交付(CI/CD)等,同時可能引入更多的視覺化和易用性功能。
1.3 功能特點
- 分散式:每個開發者都有整個程式碼倉庫的完整複製,包括所有的版本歷史。這意味著即使沒有網路連線,開發者也可以檢視專案的完整歷史記錄,並進行提交等操作。
- 快照儲存:大多數版本控制系統儲存的是檔案的變化或差異,而 Git 儲存的是檔案在每次提交時的狀態快照。這使得 Git 在處理大檔案和複雜專案時更加高效。
- 分支管理:Git 的分支功能非常強大且靈活,可以輕鬆建立、合併和刪除分支。這對於嘗試新想法、修復bug或是開發新特性非常有用。
- 資料完整性:Git 使用 SHA-1 雜湊演算法對檔案內容和目錄結構進行校驗和計算,確保了檔案的歷史記錄不被篡改。
- 效能:由於 Git 是分散式的設計,很多操作都是本地執行,因此速度非常快。
- 強大的社群和支援:作為一個開源專案,Git 擁有龐大的使用者群和活躍的社群,提供了大量的文件、教程和工具支援。
- 跨平臺:Git 可以執行在多種作業系統上,包括 Windows、Linux 和 macOS。
二、下載安裝
2.1 官網下載
https://git-scm.com/downloads
下載得到安裝包
2.2 安裝
雙擊安裝包,一直點下一步就行
安裝完成後在任意目錄點選滑鼠右鍵,如果能看到如下選單則表示安裝完成:
2.3 驗證
在 Git Bash 中輸入以下命令:
git --version
-
如果 Git 已正確安裝,您將看到類似如下的輸出:
git version 2.x.x
其中
2.x.x
是 Git 的版本號,具體版本號會根據您安裝的版本而不同。 -
如果 Git 未安裝或出現錯誤,您將看到類似如下的錯誤資訊:
bash: git: command not found
或者:
'git' is not recognized as an internal or external command
2.4 Git互動方式
Git 提供了多種互動方式,其中最常用的有 Git GUI 和 Git Bash。這兩者各有特點,適合不同的使用者需求和使用場景。在安裝 Git 時,上述兩種方式通常會與 Git 一起自動安裝。
1. Git GUI(圖形使用者介面)
Git GUI 是一個圖形化的 Git 客戶端介面,適合那些不習慣命令列操作或希望使用更直觀介面進行 Git 操作的使用者。
特點:
- 圖形化操作:使用者可以透過圖形介面執行大多數 Git 操作(如提交、分支管理、檢視日誌等),不需要輸入命令。
- 簡單易用:適合初學者和不熟悉命令列的使用者,提供了直觀的介面來處理版本控制。
- 功能豐富:雖然是圖形介面,但幾乎支援 Git 命令列中所有的基本功能,使用者可以透過點選按鈕或選單完成操作,如提交、推送、拉取、合併等。
- 適合小團隊和個人使用:Git GUI 更適合需要快速操作的使用者,適合不進行復雜命令列操作的小團隊或個人專案。
主要功能:
- 檢視檔案變更:可以輕鬆檢視工作區中的檔案與版本庫中已提交內容的差異。
- 提交和推送程式碼:可以透過簡單的點選提交更改並推送到遠端倉庫。
- 分支管理:可以方便地建立、切換、合併分支等。
- 檢視日誌:檢視提交歷史和相關詳細資訊。
使用場景:
- 新手使用者:對於不熟悉命令列的使用者,Git GUI 提供了更友好的操作介面。
- 視覺化操作:適合那些更偏向圖形化介面,而非純命令列使用者。
2. Git Bash(命令列工具)
Git Bash 是 Git 提供的一個命令列工具,模擬 Unix shell 環境,用於執行 Git 命令。它是基於 Bash(一個常見的 Unix shell)環境的,提供了一個命令列介面,使用者可以透過輸入命令來與 Git 進行互動。
特點:
- 命令列介面:使用者透過輸入 Git 命令來進行版本控制操作。相比圖形介面,命令列方式通常更加靈活且功能強大。
- 跨平臺支援:Git Bash 可以在 Windows 上模擬 Linux 命令列環境,提供類似於 macOS 或 Linux 系統的體驗。
- 高效和強大:Git Bash 支援 Git 命令和常用的 Linux 命令,可以在命令列中執行檔案操作、版本控制命令、網路操作等,效率高且適合批次操作。
- 支援指令碼和自動化:你可以編寫 Bash 指令碼來自動化某些 Git 操作,適用於開發中的複雜任務。
主要功能:
- 執行 Git 命令:透過 Git Bash,你可以執行 Git 的所有命令,如
git commit
、git push
、git pull
、git merge
等。 - 支援常用 Linux 命令:Git Bash 不僅支援 Git 命令,還提供了 Bash shell 的常用命令,如
ls
、cd
、rm
等,用於檔案系統操作。 - 跨平臺一致性:Git Bash 為 Windows 提供了類似 Unix 的環境,使得 Windows 使用者可以像在 Linux/macOS 上那樣使用 Git。
- 除錯和指令碼支援:開發人員可以編寫 Bash 指令碼來自動化一些常見的 Git 操作,提高效率。
安裝:
Git Bash 是 Git 安裝包的一部分。當你下載並安裝 Git 時,Git Bash 會自動安裝。安裝後,你可以在開始選單中找到“Git Bash”並開啟它。
使用場景:
- 命令列使用者:Git Bash 對於熟悉命令列的開發人員來說更為高效,能夠直接執行 Git 操作。
- 跨平臺開發:在 Windows 上,Git Bash 為開發者提供了一個類 Unix 環境,適合那些在跨平臺開發中需要一致性體驗的使用者。
- 自動化和批次操作:如果你需要批次處理或自動化 Git 操作,Git Bash 是一個更靈活的工具。
在本文中,簡要介紹了 Git 的基本概念及其安裝方法。Git 作為目前最流行的分散式版本控制系統,已廣泛應用於開源專案及企業開發中。透過安裝和配置 Git,您已經邁出了學習和使用版本控制的第一步。
在接下來的文章中,我們將深入探索 Git 的常用命令和工作流程,幫助您更好地理解如何使用 Git 來管理程式碼、協作開發和保持專案歷史的清晰。