共用方式為


使用 Git 忽略檔案變更

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 |Visual Studio 2022

您的項目中並非每個檔案都需要由 Git 追蹤。 通常不需要追蹤的檔案範例包括開發環境的暫存盤、測試輸出和記錄。

您可以使用數個機制來通知 Git 不應該追蹤專案中的檔案,並確保 Git 不會報告這些檔案的變更。 對於 Git 未追蹤的檔案,您可以使用 .gitignoreexclude 檔案。 針對 Git 已追蹤的檔案,您可以指示 Git 停止追蹤這些檔案,並忽略任何變更。

先決條件

類別 需求
專案存取 專案的成員。
許可 - 在私人項目中檢視程式碼:至少 基本 權限。
- 複製或貢獻私人專案中的程式碼:作為 貢獻者 安全群組的成員或在專案中具有相應的許可權。
- 設定分支或存放庫許可權:管理分支或存放庫的許可權 許可權。
- 變更預設分支:編輯原則 存放庫的許可權。
- 匯入存放庫:專案管理員成員 安全組或 Git 專案層級 建立存放庫 許可權設定為 允許。 如需詳細資訊,請參閱 設定 Git 存放庫許可權
服務 啟用 Repos
工具 選擇性。 使用 az repos 命令:Azure DevOps CLI

備註

在公用專案中,具有 項目關係人 存取權的使用者具有 Azure Repos 的完整存取權,包括檢視、複製及參與程式代碼。

類別 需求
專案存取 專案的成員。
許可 - 查看程式碼:至少 基本 權限。
- 複製程式碼或貢獻程式碼:屬於 參與者安全組 的成員或具有專案中的對應許可權。
服務 啟用 Repos

使用 .gitignore 檔案

您可以藉由新增和設定 .gitignore 檔案,告訴 Git 不要追蹤專案中的特定檔案。 檢閱下列重點:

  • 未追蹤的檔案.gitignore 檔案中的條目僅適用於未追蹤的檔案。 這些設定不會阻止 Git 報告追蹤檔案的變更。 追蹤的檔案是已認可且存在於最後一個 Git 快照中的檔案。
  • 檔案搜尋模式:檔案中的每個 .gitignore 行都會指定相對於檔案路徑的 .gitignore 檔案搜尋模式。 .gitignore 語法具有彈性,並支援使用通配符,依名稱、擴展名和路徑指定個別或多個檔案。 Git 會 .gitignore 比對專案中的檔案搜尋模式,以判斷要忽略的檔案。
  • 位置:一般而言,您會將檔案新增 .gitignore 至專案的根資料夾。 不過,您可以將 .gitignore 檔案新增至任何項目資料夾,以便讓 Git 知道該資料夾及其子資料夾中任何巢狀深度需要忽略的檔案。 針對多個 .gitignore 檔案,檔案在資料夾內指定的檔案搜尋模式 .gitignore 優先於檔案在父資料夾內指定的模式 .gitignore
  • 建立:您可以手動建立 .gitignore 檔案,並將檔案模式專案新增至其中。 或者,您可以從 GitHub gitignore 存放庫下載.gitignore開發環境的範本來節省時間。
  • 優點:使用 .gitignore 檔案的優點之一是您可以 提交 變更,並且與其他人共用。

備註

當您建立 Git 存放庫時,Visual Studio 會自動建立 .gitignore Visual Studio 開發環境的檔案。

Visual Studio 2022 透過 Git 功能表、Git 變更,以及 [方案總管] 中的快捷功能表,提供 Git 版本控制體驗。 Visual Studio 2019 16.8 版也提供 Team Explorer Git 使用者介面。 如需詳細資訊,請參閱 Visual Studio 2019 - Team Explorer 索引標籤。

在 [ Git 變更 ] 視窗中,以滑鼠右鍵按下您想要 Git 忽略的任何已變更檔案,然後選取 [忽略此本機專案 ] 或 [ 忽略此擴展名]。 這些功能表選項在被追蹤的檔案中不存在。

Visual Studio 中 [Git 變更] 視窗中已變更檔案內容功能表選項的螢幕擷取畫面。

  • 忽略此本機項目選項會將新的條目添加到.gitignore文件中,並從已變更的檔案清單中移除選取的檔案。
  • [忽略此副檔名] 選項會將新專案新增至.gitignore檔案,並從已變更檔案清單中移除所有副檔名與所選檔案相同的檔案。

若存放庫的根資料夾中尚不存在 .gitignore 檔案,任一選項都會建立它並新增一個條目進入該檔案。

編輯 gitignore 檔案

檔案中的每個 .gitignore 專案都是:一個檔案搜尋模式,指定要忽略哪些檔案、以數位符號 (#) 開頭的批注,或空白行(可讀性)。 語法.gitignore具有彈性,並支援使用通配符,依名稱、擴展名和路徑指定個別或多個檔案。 檔案搜尋模式的所有路徑都與 .gitignore 檔案相對。

以下是常見檔案搜尋模式的一些範例:

# Ignore all files with the specified name.
# Scope is all repo folders.
config.json

# Ignore all files with the specified extension.
# Scope is all repo folders.
*.json

# Add an exception to prevent ignoring a file with the specified name.
# Scope is all repo folders.
!package.json

# Ignore a file with the specified name.
# Scoped to the 'logs' subfolder.
/logs/test.logfile

# Ignore all files with the specified name.
# Scoped to the 'logs' subfolder and all folders beneath it.
/logs/**/test.logfile

# Ignore all files in the 'logs' subfolder.
/logs/

一旦您修改檔案 .gitignore ,Git 就會更新它忽略的檔案清單。

備註

Windows 用戶必須使用斜線 (/) 作為檔案中的 .gitignore 路徑分隔符,而不是使用反斜杠 (\)。 指定資料夾時,所有使用者都必須新增尾端斜線。

使用全域 .gitignore 檔案

您可以將檔案 .gitignore 指定為套用至所有本機 Git 存放庫的全域忽略檔案。 若要這樣做,請使用 git config 命令,如下所示:

git config core.excludesfile <gitignore file path>

全域 .gitignore 檔案可確保 Git 不會在任何本機存放庫中提交特定檔案類型,例如編譯的二進位檔。 存放庫特定 .gitignore 檔案中的檔案搜尋模式優先於全域 .gitignore 檔案中的模式。

使用排除檔案

您也可以將檔案搜尋模式條目新增到本機存放庫資料夾中的 .git/info/ 檔案中。 檔案 exclude 可讓 Git 知道要忽略哪些未追蹤的檔案。 它使用與 .gitignore 檔案相同的搜尋模式語法。

exclude 檔案中的項目僅適用於未追蹤的檔案。 它們不會阻止 Git 報告已追蹤之已認可檔案的變更。 每個存放庫只有一個 exclude 檔案存在。

因為 Git 不會認可或推送 exclude 檔案,所以您可以放心地使用它來忽略本機系統上的檔案,而不會影響其他人。

使用 git update-index 忽略變更

有時候,暫時停止追蹤本機存放庫檔案並讓 Git 忽略檔案的變更會很方便。 例如,您可能想要自定義開發環境的設定檔案,並避免提交變更的風險。 若要這樣做,您可以使用skip-worktree標記執行git update-index命令。

git update-index --skip-worktree <file path>

若要繼續追蹤,請使用 --no-skip-worktree 旗標執行 git update-index 命令。

或者,您可以使用 Git 的git update-index命令搭配assume-unchanged參數,暫時停止追蹤檔案,並讓 Git 忽略該檔案的變更。 這個選項的效果不如 skip-worktree 旗標,因為變更檔案內容的 Git pull 操作可能會還原 assume-unchanged 旗標。

git update-index --assume-unchanged <file path>

若要繼續追蹤,請使用 --no-assume-unchanged 旗標執行 git update-index 命令。

使用 git rm 忽略變更

.gitignoreexclude 檔案中的條目不會影響 Git 已追蹤的檔案。 Git 會追蹤您先前提交的檔案。 若要從 Git 快照集永久移除檔案,讓 Git 不再追蹤檔案,但不要從檔案系統中刪除檔案,請執行下列命令:

git rm --cached <file path>
git commit <some message>

然後,使用 .gitignoreexclude 檔案項目來防止 Git 回報檔案的變更。

後續步驟