1. 開始工作:複製(克隆)專案
我們從上節課停下的地方繼續。你已在 GitHub 上建立了一個倉庫,現在需要將它複製到本機電腦以開始工作。這個過程稱為 克隆(clone)。
步驟 1. 啟動你的 IDE。如果已經打開某個專案,請通過 File | Close Project 關閉它。在啟動畫面(Welcome Screen)選擇 Clone Repository(或 Get from VCS)。
步驟 2. 在彈出的視窗中貼上你倉庫的 URL。這種方式在你要克隆別人的倉庫時很有用。URL 可以從 GitHub 倉庫頁面複製。
如果你是克隆自己的倉庫(我們的情況),最簡單的方法是在 IDE 中直接登入你的 GitHub 帳號。為此選擇 Log in to GitHub 選項。IDE 會打開瀏覽器以進行授權。
在打開的頁面上放心點擊綠色按鈕 Authorize JetBrains。之後你可以直接從 IDE 的倉庫列表中選擇自己的倉庫。選擇需要的專案並點擊 Clone。
步驟 3. IDE 會詢問你是否信任該專案。既然這是你自己的倉庫,請點擊 Trust Project。
步驟 4. 防毒軟體設定(Windows 用戶)
Windows 的防毒軟體可能會提示 IDE 嘗試執行未知操作。由於我們將要建立並執行程式,需允許 IDE 沒有過多限制地運作。點擊「Automatically」,讓 IDE 自動將必要的資料夾加入防毒例外清單。
2. 保存變更:Commit
commit 是專案在某一時刻的「快照」或已保存狀態。把它想像成遊戲的存檔點:如果發生問題,你可以回到那個點。每個 commit 都有唯一的識別碼和描述所做更改的訊息。
gitGraph
commit id: "Initial commit"
commit id: "Add user authentication"
commit id: "Fix login button bug"
commit id: "Refactor database connection"
步驟 1. 做出更改。
如果你克隆了一個剛建立的倉庫,它通常只包含一個檔案 — README.md(以及 IDE 的隱藏資料夾)。
打開 README.md 並加入你的專案描述。當你開始編輯檔案時,IDE 會在專案欄中以 藍色 標註檔名,表示該檔案已修改但尚未被 Git 保存。IDE 會在你修改的地方顯示一條 綠色線條。
步驟 2. 打開 Commit 視窗。
在 IDE 左側有一個 Commit 分頁。打開後,你會看到所有準備保存的更改。這就是你的 暫存區(Staging Area)。
讓我們看看能看到什麼:
- Changes: 這裡列出已被 Git 跟蹤但已修改的檔案。在本例中是你修改過並加入計畫內容的
README.md。 - Unversioned Files: 這是新的檔案,Git 在專案資料夾中看到了它們,但還沒有開始跟蹤。
重要
在點擊 Commit 按鈕之前,務必檢查每個檔案前的勾選狀態。尤其是第一次提交時要格外注意。
如果在 Unversioned Files 列表中看到資料夾 .idea/(特別是 workspace.xml,這個檔案會頻繁變動)或名為 cmake-build-debug/、cmake-build-release/ 的資料夾 — 別急著提交! 這些是工作環境檔案,不應該出現在共用歷史中。好消息是:如果你使用了 C++ 的預設 .gitignore 模板,Git 會自動隱藏這些資料夾。如果它們仍然可見,就需要立刻將它們加入忽略列表(課程最後會講到)。
當前我們對第一次提交的任務是:勾選主要的專案檔案,並在 Commit Message 欄位中寫一條清晰的訊息。
步驟 3. 執行提交。
點擊藍色的 Commit 按鈕。完成!你已將專案的「快照」保存到本機倉庫。該檔案的顏色會恢復正常。
3. 將變更推送到 GitHub:Push
目前你的提交僅保存在你的電腦上。要與團隊共享或將它們安全備份到遠端倉庫,需要將它們推送到 GitHub。
sequenceDiagram
participant 本機倉庫 (你的電腦)
participant 遠端倉庫 (GitHub)
note over 本機倉庫 (你的電腦): 你已做出一個或多個提交。
它們暫時只存在於本機。
本機倉庫 (你的電腦) ->> 遠端倉庫 (GitHub): git push(推送提交)
note over 遠端倉庫 (GitHub): 你的提交已被複製
並安全保存在伺服器上。
步驟 1. 點擊 Push 按鈕。
在介面上,Push 按鈕位於主工具列(Main Toolbar)。它的圖示是一個向上並向右的箭頭。點擊它。
步驟 2. 檢查並確認。
會彈出一個視窗,顯示所有待推送的提交。這是你最後一次確認要推送的內容。點擊 Push。
如果一切順利,你會看到 IDE 的彈出通知:Pushed commits to origin/main. Create pull request。
步驟 3. 在 GitHub 上檢查結果。
推送完成後,在瀏覽器打開你的倉庫頁面。你會看到你的更改和檔案已出現在那裡。
4. Git 控制面板
IDE 提供了單獨的 Git 工具面板,並在主工具列提供快速操作。這是版本控制的中心。讓我們熟悉幾個關鍵按鈕。
Commit(勾選): 打開用於保存更改的面板。Push(向上/向右箭頭): 打開將你的提交發送到 GitHub 的視窗。Branches: 打開位於左上角的分支管理小工具。Show Git Log: 在 Git 標籤中顯示專案的全部提交歷史。你的私人時間軸。
早晨工作從 Update Project 開始
Update Project 按鈕執行一個重要操作 — 從 GitHub 下載其他團隊成員的最新更改到你的電腦(執行 git pull)。
養成習慣:每天早上在寫任何新代碼之前,先點一下這個按鈕。如果你在舊代碼基礎上開始工作,而同事已經修改了相同的檔案,到中午你可能會遇到複雜的合併衝突。
5. 使用 .gitignore 檔案
如果專案中出現了工作環境檔案或編譯產物,而你不希望它們被意外加入倉庫,就需要將它們加入忽略列表。為此在專案根目錄創建一個名為 .gitignore 的特殊檔案。
C++ 的特殊情況與為何要忽略資料夾
在 C++ 世界(使用 CLion 時),事實上的標準建構系統是 CMake。C++ 的編譯過程會產生大量臨時與二進位檔,絕對不應該提交到 Git:
cmake-build-debug/(或cmake-build-release/)— CLion 自動建立的資料夾,包含所有中間建構結果(Makefile、CMake 快取、目標檔)。這些資料夾可能達數百 MB,且因電腦而異。*.o,*.obj— 物件檔(單個 .cpp 編譯的結果)。*.exe,*.dll,*.so,*.dylib— 可執行檔與函式庫。把二進位檔放到 Git 中並不合適:它們佔空間,且對其他開發者無用(因為是為你的作業系統與 CPU 編譯的)。.idea/— 本地 IDE 的設定(哪些檔案被打開、字型大小等)。你的個人介面設定對同事沒有用,而workspace.xml幾乎每時每刻都會變動。
如何手動將檔案加入忽略:
步驟 1. 假設你建立了一個臨時檔案 notes.txt,裡面存了測試資料庫的密碼。右鍵在專案視窗中點擊該檔案。
步驟 2. 進入選單 Git -> Add to .gitignore -> Add to .gitignore。此選項會將所選檔案的名稱加入專案根目錄的 .gitignore。
如果你還沒有 .gitignore,IDE 會提示建立一個。接受即可。
步驟 3. IDE 會自動把檔名加入 .gitignore。
之後被忽略的檔案會在專案樹中顯示為灰色或橄欖色。當你嘗試提交時,Git 會「看不見」這些檔案。重點是 — 別忘了提交那個 .gitignore 檔案本身,這樣團隊的其他成員才能獲得相同的忽略規則。
如果我已經提交了該檔案怎麼辦?
.gitignore 只會忽略新的、尚未被跟蹤的檔案。如果你已經錯誤地提交了像 cmake-build-debug/ 的資料夾,它已經在歷史中,Git 會繼續跟蹤它,即使你把它加入 .gitignore。對此情況需要清除快取(例如在終端使用 git rm -r --cached cmake-build-debug/),但最好是在第一次提交時就避免把垃圾檔案加入版本控制。
.gitignore 的規則
在 .gitignore 中列出的是檔案和資料夾名的模式,Git 會根據這些模式忽略對應項目。空行會被忽略。若要加入註解,請在行首加上 #。
*— 代表任意數量的任意字元。例如*.log會忽略所有 .log 副檔名的檔案。/— 若在模式末尾代表目錄。例如build/會忽略整個 build 目錄的內容。!— 放在行首會反轉規則。例如,如果你有規則*.log,但想要跟蹤important.log,則加入!important.log。**— 匹配任意層級的子目錄。
C++ 與 CLion 的 .gitignore 範例
# CMake 的建構結果(CLion 的預設)
cmake-build-debug/
cmake-build-release/
build/
# 編譯產生的物件檔與可執行檔
*.o
*.obj
*.exe
*.dll
*.so
*.dylib
# 本地 IDE 的檔案與設定
.idea/
# 作業系統檔案
.DS_Store
Thumbs.db
現成的模板
你不需要從頭寫這些規則。社群已有可靠的模板:
- GitHub 提供的各語言與框架的
.gitignore集合: https://github.com/github/gitignore。 - gitignore.io — 一個方便的網站,可根據你的技術生成適用的
.gitignore(只需輸入 C++、CMake、CLion、Intellij 等)。
GO TO FULL VERSION