CodeGym /課程 /JAVA 25 SELF /開發者的日常流程:Commit、Push 與 .gitignore

開發者的日常流程:Commit、Push 與 .gitignore

JAVA 25 SELF
等級 25 , 課堂 1
開放

1. 開始工作:複製專案

我們從上次課程停下的地方繼續。你已在 GitHub 建立了儲存庫,現在需要把它的本機副本下載到自己的電腦上以便開始工作。這個流程稱為 複製

步驟 1. 啟動你的 IDE。如果目前開著某個專案,透過 File -> Close Project 關閉它。在起始畫面選擇 Clone RepositoryGet from VCS

步驟 2. 在開啟的視窗中貼上你的儲存庫 URL。當你要複製別人的儲存庫時,這種方式很有用。URL 可以在 GitHub 的儲存庫頁面複製。

如果你要複製的是自己的儲存庫(本講的情境),最簡單的方式是直接從 IDE 登入你的 GitHub 帳號。為此請選擇 Log in to GitHub。你的 IDE 會開啟瀏覽器進行授權。

JetBrains IDE 在 GitHub 的授權視窗

在開啟的頁面,大膽點擊綠色按鈕 Authorize JetBrains。之後你就能直接在 IDE 內從清單中挑選自己的儲存庫。選擇所需專案並按下 Clone

步驟 3. 你的 IDE 會詢問你是否信任這個專案。因為這是你自己的儲存庫,請按 Trust Project

步驟 4. 防毒軟體設定(Windows 使用者)

Windows 防毒軟體可能會警告 IDE 嘗試執行它不認得的動作。由於我們要建立並執行程式,需要允許 IDE 不受限制地運作。請點擊「Automatically」,讓 IDE 自動將必要的資料夾加入防毒軟體的排除清單。

2. 儲存變更: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

開啟 README.md 檔案,為你的專案新增說明。一旦開始編輯檔案,IDE 會在專案面板把它的名稱高亮為 藍色。這代表檔案已被修改,但變更尚未保存到 Git。IDE 也會在你修改的地方加上 綠色線條

步驟 2. 開啟 Commit 視窗。

IDE 左側有一個 Commit 標籤。打開後,你會看到所有準備保存的變更。對於第一次提交,這個視窗格外重要。

我們來看看有哪些內容:

  • Changes: 這裡是已被 Git 追蹤但有修改過的檔案。在我們的例子中是 README.md,我們往裡面加了專案計畫。
  • Unversioned Files: 這是專案資料夾中 Git 看得到、但尚未被追蹤的新檔案。

可能會產生疑問:是否需要把這些工具產生的檔案都加入儲存庫?

好消息是,當我們在 GitHub 建立儲存庫時,選擇了 .gitignore 範本。這個檔案已包含讓 Git 忽略不需要的資料夾或檔案的規則。不過這部分我們會在講座結尾更詳細地說明。

目前先完成第一次提交的任務——把專案的主要檔案加入歷史,並撰寫提交訊息。

步驟 3. 進行提交。

點擊按鈕 Commit。完成!你已在本機儲存庫保存了專案的「快照」。檔案名稱會恢復為一般顏色。

3. 將變更推送到 GitHub:Push

你的提交目前只存在於你的電腦上。若要與團隊分享或安全保存,就需要把它們推送到 GitHub 的遠端儲存庫。

        sequenceDiagram
        participant 本機儲存庫(你的電腦)
        participant 遠端儲存庫(GitHub)

        note over 本機儲存庫(你的電腦): 你已完成一個或多個提交。
它們目前只存在於此。 本機儲存庫(你的電腦) ->> 遠端儲存庫(GitHub):git push(推送提交) note over 遠端儲存庫(GitHub): 你的提交已被複製,
並安全地保存於伺服器上。
你的本機提交會被推送到遠端伺服器,讓專案歷史保持同步。

步驟 1. 點擊 Push 按鈕。

在 IDE 右上角有個向上的綠色箭頭——那就是 Push 按鈕。點擊它。

步驟 2. 檢查並確認。

會開啟一個視窗,顯示所有已準備推送的提交。這是你最後一次確認是否推送正確內容的機會。點擊 Push

如果一切順利,你會看到訊息:Pushed commits to origin/main. Create pull request

步驟 3. 在 GitHub 上檢查結果。

推送成功後,打開你在 GitHub 上的儲存庫頁面。你會看到變更已經出現。

4. Git 控制面板

你的 IDE 在頂部選單有一個專門的 Git 選單。這就是你的版本控制中樞。我們快速認識一下其中的重點項目。

  • Commit:開啟我們已經熟悉的保存變更視窗。
  • Push:開啟將提交推送到 GitHub 的視窗。
  • Update Project:非常重要的功能。它會下載其他團隊成員的最新變更(執行 git pull)。每天早上開始工作前都按一下!
  • Branches:開啟分支管理視窗。這部分我們會在下一堂課詳解。
  • Show Git Log:顯示你專案的完整提交歷史。你的個人時光機。

5. 使用 .gitignore 檔案

如果你在專案中加入了一些工具產生的檔案,又不希望它們被誤加到儲存庫,可以把它們加入忽略清單。為此有個名為 .gitignore 的檔案。當專案裡有不需要納入版本控制的檔案(如暫存檔、日誌、密碼)時,它非常好用。

步驟 1. 先在專案目錄中建立你想忽略的檔案。例如 notes.txt。建立之後,如果 IDE 提示將其加入 Git,請按 Cancel

步驟 2. 在「Project」視窗中用滑鼠右鍵點選剛剛建立的檔案。前往 Git --> Add to .gitignore --> Add to .gitignore。這個選項會把所選檔案加入專案根目錄的 .gitignore

如果你的專案中還沒有 .gitignore,IDE 會提示建立它。請同意。

步驟 3. 你的 IDE 會自動把檔名加入 .gitignore

把檔案加入 .gitignore 後,這些被忽略的檔案會以灰色或棕色顯示。當你嘗試提交變更時,這些檔案會被忽略。你可以把 .idea 資料夾加入忽略。

別忘了把 .gitignore 檔案本身也提交到儲存庫,並推送到 GitHub,讓所有專案成員都使用相同的忽略規則。

排除本機檔案:.git/info/exclude

除了供專案所有使用者共同使用的 .gitignore 外,Git 也提供在 .git/info/exclude 建立本機忽略規則的能力。這些規則不會被提交到儲存庫,只會對你本機的專案副本生效。

例如,用來忽略你的 IDE 生成、只對你自己有效且不該進版本控制的檔案,就很實用。

重要! 本機忽略規則只對你的本機儲存庫副本生效。

如果我已經提交了怎麼辦?

.gitignore 只會忽略新的、尚未被追蹤的檔案。如果你已經提交過某個檔案,它已在儲存庫歷史中,Git 仍會持續追蹤它,即便你把它加進 .gitignore。這種情況可以在終端機使用命令:git rm --cached <file>。不過關於它的細節需要另外再查閱。

.gitignore 的規則

.gitignore 檔案中,你可以指定 Git 應忽略的檔名與資料夾名稱樣式。

空白行會被忽略。若要新增註解,請以字元 # 作為該行的開頭。

樣式:

  • * — 代表任意數量的任意字元。例如,*.log 會忽略所有副檔名為 .log 的檔案。
  • / — 出現在樣式結尾時代表資料夾。例如,logs/ 會忽略 logs 資料夾的所有內容。
  • ! — 出現在行首時代表反轉規則。例如,你有 *.log 的規則,但想追蹤 important.log,就新增一行 !important.log
  • ** — 匹配任意層級的巢狀資料夾。例如,**/temp 會忽略任意層級中的 temp 資料夾。

.gitignore 檔案範例


# 編譯後的程式碼
/bin/
/obj/

# 暫存檔
*.tmp
*.swp

# 日誌
*.log

# IDE 產生的資料夾
.idea/
*.user
*.suo

# 虛擬環境與相依
/venv/
/node_modules/

現成範本

你不需要從零開始撰寫這些檔案。已有現成且經社群驗證的範本可用:

  1. GitHub 為不同語言與框架提供的 .gitignore 集合:https://github.com/github/gitignore
  2. gitignore.io — 可依你的技術組合產生 .gitignore 的好用網站。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION