如何使用.gitignore忽略Git中的文件和目錄
VSole2022-04-21 06:22:02
通常,在項目上使用Git的工作時,你會希望排除將特定文件或目錄推送到遠程倉庫庫中的情況。.gitignore文件可以指定Git應該忽略的未跟蹤文件。在本教程中,我們將說明如何使用.gitignore忽略Git中的文件和目錄。包括常見匹配模式*星號,斜杠/,#井號注釋,?問號,[]方括號等通匹配符,一個.gitignore文件的示例,自定義排除忽略規則,全局的.gitignore配置,調試.gitignore文件,顯示所有被忽略的文件
應該忽略哪些文件
被忽略的文件通常是特定于平臺的文件或從構建系統自動創建的文件。一些常見的例子包括:運行時文件,例如日志,鎖定文件,緩存或臨時文件。具有敏感信息的文件,例如密碼或API密鑰。已編譯的代碼,例如.class或.o。依賴目錄,例如/vendor或/node_modules。構建的輸出目錄,例如/public,/out或/dist。系統文件,例如.DS_Store或Thumbs.db。IDE或文本編輯器配置文件。
.gitignore模式
.gitignore文件是純文本文件,其中每行包含一個模式,用于忽略文件或目錄。.gitignore使用 globbing pattern模式來匹配帶通配符的文件名。如果文件或目錄包含在通配符,則可以使用單個反斜杠(\)來轉義字。
注釋
以井號(#)開頭的行是注釋,將被忽略。空行可以用來提高文件的可讀性,并可以對相關的模式行進行分組。斜杠符
斜杠符號(/)是目錄的分隔符。斜杠開頭模式相對于.gitignore所在的目錄。如果模式以斜杠開頭,則僅從倉庫的根目錄中開始匹配文件和目錄。如果模式不是以斜杠開頭,則它將匹配任何目錄或子目錄中的文件和目錄。
如果模式以斜杠結尾,則僅匹配目錄。當目錄被忽略時,其所有文件和子目錄也將被忽略。
文件名
最直接的模式是沒有任何特殊字符的文件名。例如/access.log僅匹配access.log。而access.log將會匹配當前目錄與子目錄 access.log,logs/access.log ,var/logs/access.log。當以/斜杠符號結束時則匹配目錄。例如build/匹配build目錄。
通配符
*星號符號匹配零個或多個字符。例如*.log模式將匹配error.log,logs/debug.log,build/logs/error.log等所有目錄下以.log作為擴展名的文件。**兩個相鄰的星號符號匹配任何文件或零個或多個目錄。當后跟斜杠(/)時,它僅與目錄匹配。例如,logs/將會匹配logs目錄中所有文件與目錄。/build將匹配所有目錄中出現以build命名目錄與文件var/build,pub/build。
模式foo/**/bar將匹配foo/bar,foo/a/bar,foo/a/b/c/bar。
?問號匹配單個任意字符。例如模式access?.log將會匹配access0.log,access1.log,accessA.log 。
方括號
[...]方括號匹配方括號中包含的字符。當兩個字符之間用連字符-隔開時,表示一個字符范圍。該范圍包括這兩個字符之間的所有字符。范圍可以是字母或數字。如果[之后的第一個字符是感嘆號(!),則該模式匹配除指定集合中的字符以外的任何字符。
例如模式*.[oa]將匹配文件file.o,file.a。模式*.[!oa]將匹配file.s,file.1但不匹配file.0與file.a。
反模式
以感嘆號(!)開頭的模式將否定先前模式。此規則的例外是,如果排除了其父目錄,則重新包含文件。例如模式 *.log與!error.log這將會匹配所有以.log作為擴展名文件,但不匹配error.log。.gitignore范例
以下是.gitignore文件的示例:# 忽略node_modules目錄 node_modules/ # 忽略Logs logs *.log # 忽略/dist目錄,相對.gitignore文件所在目錄 /dist # 忽略.env文件 .env # 忽略IDE的配置文件 .idea/ .vscode/ *.sw*
本地.gitignore
本地.gitignore文件通常放置在倉庫庫的根目錄中。但是,你可以在倉庫的不同子目錄中創建多個.gitignore文件。.gitignore文件中的模式相對于文件所在目錄匹配。
在子目錄中的文件中定義的模式優先于高于根目錄中的模式。本地.gitignore文件與其他開發人員共享,并且應包含對存儲庫的所有其他用戶有用的模式。個人忽略規則
應在.git/info/exclude文件中配置特定于本地倉庫且不應分發到其他倉庫的模式。例如,你可以使用此文件忽略個人項目工具中生成的文件。全局.gitignore
Git還允許你創建全局.gitignore文件,你可以為本地系統上的每個Git倉庫定義忽略規則。該文件可以命名為任意名稱,并存儲在任何位置。保存此文件的最常見位置是主目錄。你必須手動創建文件并配置Git使用它。例如,要將~/.gitignore_global設置為全局Git忽略文件,你可以執行以下操作。首先創建文件:touch ~/.gitignore_global
將文件添加到Git配置:
git config --global core.excludesfile ~/.gitignore_global
使用文本編輯器打開文件并向其中添加規則。全局規則對于忽略你永遠不想提交的特定文件(例如帶有敏感信息或已編譯的可執行文件的文件)特別有用。
忽略以前提交的文件
你的工作副本中的文件可以被追蹤,也可以不被追蹤。要忽略先前提交的文件,你需要取消暫存并從索引中刪除該文件,然后在.gitignore中添加該文件模式:git rm --cached filename
--cached選項告訴git不要從工作樹中刪除文件,而只是從索引中刪除它。要遞歸刪除目錄,請使用-r選項:
git rm --cached filename
如果要從索引和本地文件系統中刪除文件,請忽略--cached選項。以遞歸方式刪除文件時,使用-n選項將執行空運行并顯示要刪除的文件:
git rm -r -n directory
調試.gitignore文件
有時候,確定為什么要忽略特定文件可能會很困難,尤其是當你使用多個.gitignore文件或復雜格式時。這是git check-ignore命令的用處,告訴git顯示匹配模式的詳細信息。
例如,要檢查為什么忽略www/yarn.lock文件,可以運行:git check-ignore -v www/yarn.lock
輸出顯示gitignore文件的路徑,匹配行的編號和實際模式。www/.gitignore:31:/yarn.lock www/yarn.lock
該命令還接受多個文件名作為參數,并且文件不必存在于你的工作樹中。
顯示所有被忽略的文件
帶有--ignored選項的git status命令顯示所有被忽略文件的列表:
git status --ignored
結論
.gitignore文件使你可以從git倉庫中排除文件。該文件包含用于描述應忽略的特定文件和目錄的模式。gitignore.io是一種在線服務,可讓你為操作系統,編程語言或IDE生成.gitignore文件。如果你有任何問題或反饋,請隨時發表評論。VSole
網絡安全專家