使用 Git 忽略檔案變更
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 |Visual Studio 2022
Git 不應該追蹤您專案中的每一個檔案。 來自開發環境的暫存盤、測試輸出和記錄都是可能不需要追蹤的檔案範例。
您可以使用各種機制讓 Git 知道專案中的哪些檔案無法追蹤,並確保 Git 不會報告這些檔案的變更。 對於 Git 未追蹤的檔案,您可以使用 .gitignore
或 exclude
檔案。 對於 Git 確實追蹤的檔案,您可以告訴 Git 停止追蹤這些檔案,並忽略變更。
在本文中,您將學會如何:
- 使用檔案忽略未追蹤檔案的
.gitignore
變更。 - 使用
exclude
檔案忽略未追蹤檔案的變更。 - 停止追蹤檔案,並使用
git update-index
命令忽略變更。 - 停止追蹤檔案,並使用
git rm
命令忽略變更。
使用 .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 忽略的任何已變更檔案,然後選取 [忽略此本機專案] 或 [忽略此擴展名]。 這些功能表選項不存在於追蹤的檔案中。
[ 忽略此本機專案 ] 選項會將新專案新增至 .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
檔案中的模式。
使用排除檔案
您也可以將檔案搜尋模式的專案新增至 exclude
本機存放庫資料夾中的檔案 .git/info/
。 檔案 exclude
可讓 Git 知道要忽略哪些未追蹤的檔案。 它會使用與檔案相同的檔案搜尋模式 .gitignore
語法。
檔案中的 exclude
專案僅適用於未追蹤的檔案。 它們不會防止 Git 回報已追蹤之已認可的檔案變更。 每個存放庫只有一個 exclude
檔案存在。
因為 Git 不會認可或推送 exclude
檔案,所以您可以放心地使用它來忽略本機系統上的檔案,而不會影響其他人。
使用 git update-index 忽略變更
有時候,暫時停止追蹤本機存放庫檔案並讓 Git 忽略檔案的變更會很方便。 例如,您可能想要自定義開發環境的配置檔案,而不需要認可變更的風險。 若要這樣做,您可以使用 旗標執行 git update-index
命令 skip-worktree
:
git update-index --skip-worktree <file path>
若要繼續追蹤,請使用 --no-skip-worktree
旗標執行 git update-index
命令。
或者,您可以使用 命令搭配 旗標,暫時停止追蹤檔案,並讓 Git 忽略檔案 git update-index
的 assume-unchanged
變更。 這個選項比旗標效率低 skip-worktree
,因為變更檔案內容的 Git pull
作業可以還原 assume-unchanged
旗標。
git update-index --assume-unchanged <file path>
若要繼續追蹤,請使用 --no-assume-unchanged
旗標執行 git update-index
命令。
使用 git rm 忽略變更
或 exclude
檔案中的.gitignore
專案不會影響 Git 已追蹤的檔案。 Git 會追蹤您先前認可的檔案。 若要從 Git 快照集永久移除檔案,讓 Git 不再追蹤檔案,但不要從檔案系統中刪除檔案,請執行下列命令:
git rm --cached <file path>
git commit <some message>
然後,使用 .gitignore
或 exclude
檔案專案來防止 Git 回報檔案的變更。