1. 沒有版本控制的問題:為什麼只靠複製檔案是個壞主意
先從一個真實情境開始。想像你正在開發自己的 Java 專案。一切都很順利,直到進入「實驗」時刻。你決定要改點什麼,但又擔心把可運作的版本弄壞。怎麼辦?當然是把專案複製一份!
結果你的磁碟裡出現了這些傑作:
MyProject/
├── Main.java
├── Main_backup.java
├── Main_final.java
├── Main_final2.java
├── Main_tochno_final.java
├── Main_tochno_tochno_final.java
熟悉嗎?現在再想像另一位朋友也加入了這個專案。他也喜歡複製檔案——只是用他自己的方式。要怎麼判斷哪一個是最新、可運作的版本?怎麼知道是誰改了什麼?如果實驗失敗,要如何把一切復原?
沒有版本控制時:
- 很容易遺失或混淆可用的程式碼。
- 無法「回到」舊版本。
- 兩三個人一起協作變得困難。
- 充滿混亂,對嘗試新點子心生畏懼。
版本控制系統正是用來解決這些問題——例如 Git。
2. 為什麼開發者需要 Git?
Git 是一套功能強大的版本控制系統,用於在軟體開發過程中追蹤原始碼的變更。它讓開發者能保存檔案的不同版本,並協調多人在同一個專案上合作。
Git 的基本概念:
儲存庫
儲存庫(或稱「repo」)是保存整個專案歷史的地方,包括所有變更與檔案版本。
提交
commit 是專案的已儲存狀態。每個 Git 提交都包含對專案做了哪些變更、由誰在何時完成等資訊。提交構成專案的歷史,並允許回到任何先前版本。
gitGraph
commit id: "1"
commit id: "2"
commit id: "3"
commit id: "4"
commit id: "5"
commit id: "6"
每次提交都是專案的一個「快照」,在前一次之後接續,形成連續的變更歷史。
分支
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 基本指令(底層在做什麼)
以下是在終端機使用 Git 的基本指令清單。了解哪些指令是各種操作的基礎很重要。不過我們將採用 GUI 方式,學會用 IntelliJ IDEA 的圖形介面來完成同樣的事。把這些指令視為「引擎蓋底下」在運作的東西。
| 指令 | 說明 |
|---|---|
git init |
在目前目錄初始化新的 Git 儲存庫。 |
git clone |
從 URL 複製儲存庫到新的目錄。 |
git add |
把檔案加入暫存區以備下次提交。 |
git commit |
將已暫存的變更提交到儲存庫。 |
git push |
將本機儲存庫的變更推送到遠端。 |
git pull |
從遠端儲存庫拉取最新內容並更新目前分支。 |
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 等服務上。它們提供集中化的程式碼保存,並且是協作的基礎。遠端儲存庫也是自動化流程(如建置、測試與部署)的整合點。
2. 本機儲存庫
本機儲存庫是你在電腦上的個人副本。在這個儲存庫中,你可以在不連網的情況下執行所有 Git 操作(提交、分支、合併)。
3. 工作目錄
你電腦上的工作目錄包含專案目前的實際檔案,也就是你此刻正在處理的內容。你可以在這裡查看與修改檔案、加入新功能或修正錯誤。
這些元件共同提供了強大的原始碼管理基礎設施,讓開發者能管理專案歷史並順利協作。
5. GitHub——你的作品集
GitHub 是領先的原始碼託管網路平台,使用 Git 版本控制系統。自 2008 年成立以來,它迅速成為全球開發者的關鍵工具之一。
GitHub 讓使用者能建立儲存庫來管理專案、控制並追蹤程式碼變更,並與其他開發者協作。對現代開發者而言,GitHub 個人檔案是作品集的重要一環,可以展示給潛在雇主。
6. 在 GitHub 建立你的第一個儲存庫
步驟 1. 前往 https://github.com 並註冊。
步驟 2. 按下按鈕 New repository 以建立新儲存庫。
步驟 3. 為儲存庫設定參數:
- 儲存庫名稱: 取一個有意義的名稱。
- 公開或私人: 對於學習專案,建議選擇「Public」,讓其他人可以看到。
- Add a README file: 務必勾選。README 是你專案的「門面」。
- Add .gitignore: 點選下拉清單並選擇你所用語言的範本。
- Choose a license: 可以略過。
- 按下
Create repository。
步驟 4. 恭喜,你的第一個遠端儲存庫已建立!
7. 安裝與設定 Git
雖然可以透過主控台指令學 Git 的基礎(就像影片所示),但在日常工作中有 99% 的開發者使用整合在開發環境中的便利工具。我們的目標——是教你像專業人員一樣工作。
JetBrains 的現代 IDE 中用於操作 Git 的介面幾乎一致——不論是用於 Java/Kotlin 的 IntelliJ IDEA、用於 C# 的 Rider,或用於 Python 的 PyCharm——幾乎都相同。這代表只要學會在一個環境裡使用 Git,就能輕鬆套用到任何其他環境。因此我們會以 IntelliJ IDEA 作為通用示例。你在這裡看到的一切,在你喜歡的 IDE 中看起來與運作方式都幾乎相同。
要在你的電腦上使用 Git,首先需要安裝 Git。如果你使用 IntelliJ IDEA,它多半會在系統找不到 Git 時自動提示安裝。我們建議同意這個提議——這是最簡單的方式。
選擇 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