1. 沒有版本控制的問題:為什麼只是複製檔案是個壞主意
我們先從生活情境開始。想像你在做一個 C# 專案。一切都很順利,直到出現「實驗」階段。你決定改動某些東西,但又怕把穩定版弄壞。怎麼辦?當然是複製專案!
結果在你的磁碟上出現了這些傑作:
MyProject/
├── Main.cs
├── Main_backup.cs
├── Main_final.cs
├── Main_final2.cs
├── Main_tochno_final.cs
├── Main_tochno_tochno_final.cs
熟悉嗎?現在再想像有個朋友也加入到專案。他也喜歡複製檔案——只是用他自己的方式。怎麼判斷哪個是最新且可用的版本?怎麼知道誰改了什麼?如果實驗失敗了,怎麼回復?
沒有版本控制時:
- 很容易丟失或弄混工作中的程式碼。
- 無法「回退」到舊的版本。
- 多人協作會很困難。
- 混亂,並且害怕去做實驗。
這些問題正是版本控制系統要解決的——例如 Git。
2. 為什麼開發者需要 Git?
Git — 是一個強大的版本控制系統,用來在軟體開發過程中追蹤原始程式碼的變更。它讓開發者可以保存不同版本的檔案,並協調多人一起在同一個專案上工作。
Git 的主要概念:
Repository
Repository(或叫「repo」)是儲存專案整個歷史的地方,包括所有的變更和檔案版本。
Commits
commit — 是專案的一個已保存狀態。每個 commit 包含哪些變更被做了、誰做的、何時做的資訊。Commits 形成專案的歷史,讓你可以回到任意以前的版本。
gitGraph
commit id: "1"
commit id: "2"
commit id: "3"
commit id: "4"
commit id: "5"
commit id: "6"
每個 commit 就像專案的一張「快照」,連接成一條連續的變更歷史。
Branches
branch — 是獨立的開發線。預設情況下 Git 建立 main 分支。你可以為新功能或修正建立新分支,然後再把它們合併回主分支。
gitGraph
commit id: "1"
commit id: "2"
branch develop
commit id: "3"
commit id: "4"
commit id: "5"
checkout main
commit id: "6"
commit id: "7"
merge develop
commit id: "8"
commit id: "9"
從主分支 main 分出 develop 分支做平行開發。工作完成後,從 develop 的變更會被合併回 main。
3. Git 的主要命令(底層操作)
下面是透過 terminal 使用 Git 的一些主要命令。理解這些命令有助於掌握所有操作的底層運作。不過我們會採用 GUI 方式,教你如何用 IntelliJ IDEA 的圖形介面完成這些動作。把這些命令看成是「底層發生了什麼」。
| 命令 | 說明 |
|---|---|
git init |
在當前目錄初始化一個新的 Git repository。 |
git clone |
從 URL 克隆一個 repository 到新的目錄。 |
git add |
把檔案加入 index,為下一次 commit 做準備。 |
git commit |
把已準備的變更記錄到 repository 中。 |
git push |
把本地 repository 的變更推送到遠端。 |
git pull |
把遠端 repository 的最新版本拉取並更新當前分支。 |
git branch |
顯示、建立或刪除分支。 |
git merge |
把指定分支的變更合併到當前分支。 |
這些命令是使用 Git 的基本工具,讓你能管理程式碼變更、分支與合併,適用於各種規模的專案。
sequenceDiagram
participant 工作目錄
participant 暫存區_Staging
participant 本地儲存庫
participant 遠端儲存庫
工作目錄 ->> 暫存區_Staging: git add (準備)
暫存區_Staging ->> 本地儲存庫: git commit (本地保存)
本地儲存庫 ->> 遠端儲存庫: git push (發送到伺服器)
遠端儲存庫 ->> 工作目錄: git pull (下載更新)
4. 三個程式碼儲存位置
使用版本控制時,你的程式碼大致會儲存在三個地方:
1. 遠端儲存庫
這是集中式儲存你程式碼的地方,通常在像 GitHub、GitLab 或 Bitbucket 這樣的服務上。它們提供集中式的程式碼儲存,是協作的基礎,也常用於自動化流程,例如 build、test 和 deploy。
2. 本地儲存庫
本地儲存庫是你電腦上的個人程式碼複本。在這裡你可以離線執行所有 Git 操作(commit、branch、merge 等)。
3. 工作目錄
工作目錄是你正在編輯的專案檔案所在的位置。你可以在這裡查看和修改檔案、新增功能或修正錯誤。
這些組件一起構成了管理原始程式碼的強大基礎設施,讓開發者能管理專案歷史並協作。
5. GitHub — 你的作品集
GitHub — 是領先的程式碼託管平台,使用 Git 作為版本控制系統。自 2008 年成立以來,它迅速成為全球開發者的重要工具。
GitHub 讓使用者建立 repositories 來管理專案、追蹤程式碼變更並與其他開發者協作。對現代開發者來說,在 GitHub 上的個人檔案是重要的作品集,可以展示給潛在雇主看。
6. 在 GitHub 上建立你的第一個 repository
步驟 1. 打開 https://github.com 並註冊帳號。
步驟 2. 點擊 New repository 按鈕來建立新的 repository。
步驟 3. 設定 repository 的參數:
- Repository 名稱: 想一個有意義的名稱。
- 公開還是私有: 對於教學專案建議選「Public」,這樣別人可以看到。
- Add a README file: 一定要勾選。README 是專案的「門面」。
- Add .gitignore: 點選下拉選單並選擇適合你語言的範本。
- Choose a license: 可以跳過。
- 點擊
Create repository。
步驟 4. 恭喜,你的第一個遠端 repository 已建立!
7. 安裝與設定 Git
雖然可以透過命令列學習 Git(如影片所示),但在日常工作中 99% 的開發者更常使用整合在開發環境裡的工具。我們的目標是教你以專業人士的方式工作。
JetBrains 系列的現代 IDE(像是 Java/Kotlin 的 IntelliJ IDEA、C# 的 Rider 或 Python 的 PyCharm)裡的 Git 介面幾乎相同。也就是說,學會在一個 IDE 中用 Git,你就能很容易把這些技能套用到其他 IDE。為此我們會用 IntelliJ IDEA 當作範例。你在這裡看到的操作在你喜歡的 IDE 中看起來和運作方式都會一樣。
要在電腦上使用 Git,首先需要安裝 Git。如果你使用 IntelliJ IDEA,當系統找不到 Git 時,IDE 通常會提示你自動安裝。我們建議接受這個建議——這是最簡單的方式。
關閉當前專案,選擇 File > Close Project,然後點 Clone Repository。
如果你想手動安裝,請使用官方網站: https://git-scm.com/downloads。
8. 一點歷史:main vs master
以前 Git 的預設分支叫做 master。但在 2020 年,開發者社群與主要平台(包括 GitHub)轉而使用較中性的術語 — main。
這點很重要,因為在一些舊文章或專案中你仍可能看到 master 的提法。在我們的講座和現代專案中,主要分支會用 main。
想知道更多關於改名為 main 的資訊,可以看這些連結:
GO TO FULL VERSION