Git是一個(gè)流行的版本控制系統(tǒng)。它是開發(fā)人員如何在項(xiàng)目中協(xié)作和工作的方式。
Git允許您跟蹤隨著時(shí)間推移對項(xiàng)目所做的更改。除此之外,如果您想撤消更改,它還允許您恢復(fù)到以前的版本。
Git的工作方式是使用Git add命令在項(xiàng)目中暫存文件,然后使用Git commit命令提交文件。
當(dāng)你作為團(tuán)隊(duì)的一員在一個(gè)項(xiàng)目中工作時(shí),有時(shí)你不想與他人共享項(xiàng)目的某些文件或部分內(nèi)容。
換句話說,您不希望將這些特定的文件包含或提交到項(xiàng)目的主版本。這就是為什么你可能不想使用git add .命令將當(dāng)前git目錄中的每一個(gè)文件進(jìn)行升級。
當(dāng)你使用git commit命令時(shí),每個(gè)文件都會(huì)被提交——這也包括不需要或不應(yīng)該提交的文件。
你可能希望Git忽略特定的文件,但是沒有Git ignore命令來實(shí)現(xiàn)這個(gè)目的。
那么,如何告訴Git忽略并不跟蹤特定的文件呢?使用.gitignore文件。
在本文中,您將了解什么是.gitignore文件,如何創(chuàng)建一個(gè)文件,以及如何使用它來忽略文件和文件夾。您還將看到如何忽略之前提交的文件。
什么是.gitignore文件?.gitignore文件的用途是什么?
當(dāng)前運(yùn)行的Git存儲庫中的每個(gè)文件都有以下狀態(tài)之一:
tracked?-這些是Git所知道的所有文件或目錄。這些是新暫存(用git add添加的)和提交(用git commit提交的)到主倉庫的文件和目錄。
untracked?-這些是在工作目錄中創(chuàng)建的任何新文件或目錄,但還沒有暫存(或使用git add命令添加)。
ignored?-這些是Git在Git存儲庫中完全排除、忽略和不知道的所有文件或目錄。從本質(zhì)上說,這是一種告訴Git哪些未跟蹤的文件應(yīng)該保持不跟蹤且永遠(yuǎn)不提交的方式。
所有被忽略的文件都被放置在.gitignore文件里。
.gitignore文件是一個(gè)純文本文件,它包含來自項(xiàng)目的所有指定文件和文件夾的列表,Git應(yīng)該忽略和不跟蹤這些文件和文件夾。
在.gitignore內(nèi)部,您可以通過提到特定文件或文件夾的名稱或模式,告訴Git只忽略單個(gè)文件或文件夾。您還可以使用相同的方法告訴Git忽略多個(gè)文件或文件夾。 ?
創(chuàng)建一個(gè).gitignore文件
通常,.gitignore文件被放置在存儲庫的根目錄中。根目錄也稱為父目錄和當(dāng)前工作目錄。根文件夾包含組成項(xiàng)目的所有文件和其他文件夾。也就是說,您可以將它放在存儲庫中的任何文件夾中。你甚至可以有多個(gè).gitignore文件。
在macOS或者Linux系統(tǒng)中創(chuàng)建.gitignore文件可以使用命令行,打開終端,然后使用cd命令導(dǎo)航到包含項(xiàng)目的根文件夾,并輸入以下命令為您的目錄創(chuàng)建一個(gè).gitignore文件:
?
>touch .gitignore
?
默認(rèn)情況下,名稱前面帶點(diǎn)(.)的文件是隱藏的。
單獨(dú)使用ls命令時(shí),隱藏文件是不可見的。要從命令行查看所有文件,包括隱藏文件,使用-a標(biāo)志和ls命令,如下所示:
?
>ls -a?
.gitignore文件包含的內(nèi)容
?
你應(yīng)該考慮添加到.gitignore文件中的文件類型是不需要提交的任何文件。出于安全原因,您可能不希望提交它們,或者因?yàn)樗鼈儗δ鷣碚f是本地的,因此對于與您從事同一項(xiàng)目的其他開發(fā)人員來說是不必要的。
以下這些內(nèi)容可能會(huì)包含在文件中:
操作系統(tǒng)文件。每個(gè)操作系統(tǒng)(如macOS、Windows和Linux)都會(huì)生成特定于系統(tǒng)的隱藏文件,其他開發(fā)人員不需要使用這些文件,因?yàn)樗麄兊南到y(tǒng)也會(huì)生成這些文件。例如,在macOS上,F(xiàn)inder生成一個(gè). ds_store文件,其中包括用戶對文件夾外觀和顯示的首選項(xiàng),例如圖標(biāo)的大小和位置。
由代碼編輯器和IDE (IDE代表集成開發(fā)環(huán)境)等應(yīng)用程序生成的配置文件。這些文件是根據(jù)您、您的配置和您的首選項(xiàng)設(shè)置定制的。
從項(xiàng)目中使用的編程語言或框架自動(dòng)生成的文件,以及編譯后的特定于代碼的文件,如.o文件。
包管理器生成的文件夾,比如npm的node_modules文件夾。這是一個(gè)用于保存和跟蹤本地安裝的每個(gè)包的依賴項(xiàng)的文件夾。
包含敏感數(shù)據(jù)和個(gè)人信息的文件。此類文件的一些例子是帶有您的憑證(用戶名和密碼)的文件和帶有環(huán)境變量的文件,如.env文件(.env文件包含需要保持安全和私有的API密鑰)。
運(yùn)行時(shí)文件,如.log文件。它們提供關(guān)于操作系統(tǒng)的使用活動(dòng)和錯(cuò)誤的信息,以及操作系統(tǒng)中發(fā)生的事件的歷史記錄。
如何忽略Git中的文件和文件夾?
如果您只想忽略一個(gè)特定的文件,則需要提供從項(xiàng)目根目錄到該文件的完整路徑。
例如,如果你想忽略根目錄下的一個(gè)text.txt文件,你可以這樣做:
?
>/text.txt
?
如果您想忽略位于根目錄下test目錄中的text.txt文件,您可以執(zhí)行以下操作:
?
>/test/text.txt
?
上面內(nèi)容也可這樣寫:
?
>test/text.txt
?
如果您想要忽略所有具有特定名稱的文件,則需要寫入文件的字面名稱。
例如,如果你想忽略任何text.txt文件,你可以在.gitignore中添加以下內(nèi)容:
?
>text.txt
?
在這種情況下,您不需要提供特定文件的完整路徑。此模式將忽略位于項(xiàng)目中任何位置的具有該特定名稱的所有文件。
要忽略一個(gè)完整的目錄及其所有內(nèi)容,你需要在目錄名的最后加上斜杠/:
?
>test/
?
該命令將忽略位于項(xiàng)目中任何位置的名為test的目錄(包括該目錄中的其他文件和其他子目錄)。
需要注意的是,如果只寫文件的名稱,或者只寫目錄的名稱而不加斜杠/,那么該模式將匹配具有該名稱的任何文件或目錄:
?
# matches any files and directories with the name test >test
?
如果您想忽略以特定單詞開頭的任何文件或目錄,該怎么辦?
假設(shè)您希望忽略所有名稱以img開頭的文件和目錄。要做到這一點(diǎn),你需要指定你想要忽略的名稱,后面跟著*通配符選擇器,就像這樣:
?
>img*
?
該命令將忽略所有名稱以img開頭的文件和目錄。
但是,如果您想忽略任何以特定單詞結(jié)尾的文件或目錄,該怎么辦呢?
如果希望忽略以特定文件擴(kuò)展名結(jié)尾的所有文件,則需要使用*通配符選擇器,后面跟著要忽略的文件擴(kuò)展名。
例如,如果你想忽略所有以.md文件擴(kuò)展名結(jié)尾的markdown文件,你可以在.gitignore文件中添加以下內(nèi)容:
?
>*.md
?
該模式將匹配項(xiàng)目中任何以.md擴(kuò)展名結(jié)尾的文件。
前面介紹了如何忽略以特定后綴結(jié)尾的所有文件。如果您想要做一個(gè)例外,并且有一個(gè)帶有該后綴的文件不想忽略,會(huì)發(fā)生什么情況呢?
假設(shè)你在.gitignore文件中添加了以下內(nèi)容:
?
.md
?
該模式忽略所有以.md結(jié)尾的文件,但您不希望Git忽略README.md文件。
要做到這一點(diǎn),您需要使用帶有感嘆號的否定模式,!,來使該文件失效,否則該文件將會(huì)被忽略:
?
# ignores all .md files .md # does not ignore the README.md file !README.md
?
對于.gitignore文件中的這兩種模式,所有以.md結(jié)尾的文件都會(huì)被忽略,除了README.md文件。
要注意的是,如果忽略整個(gè)目錄,此模式將不起作用。
假設(shè)你忽略了所有的測試目錄:
?
test/
?
假設(shè)在一個(gè)測試文件夾中,有一個(gè)文件,例如.Md,你不想忽視的。
你不能像這樣對一個(gè)被忽略的目錄中的文件進(jìn)行否定:
?
# ignore all directories with the name test test/ # trying to negate a file inside an ignored directory won't work !test/example.md
如何忽略之前提交的文件
?
最好的做法是創(chuàng)建一個(gè).gitignore文件,其中包含創(chuàng)建新存儲庫時(shí)要忽略的所有文件和不同的文件模式——在提交之前。
Git只能忽略尚未提交到存儲庫的未跟蹤文件。
如果您在過去已經(jīng)提交了一個(gè)文件,但希望沒有提交該怎么辦?
假設(shè)您不小心提交了一個(gè)存儲環(huán)境變量的.env文件。
你首先需要更新.gitignore文件以包含.env文件:
?
# add .env file to .gitignore echo ".env" >> .gitignore
?
現(xiàn)在,你需要告訴Git不要跟蹤這個(gè)文件,把它從索引中刪除(如果是文件夾需要添加-r選項(xiàng)):
?
git rm --cached .env
?
git rm命令和--cached選項(xiàng)一起從存儲庫中刪除文件,但不刪除實(shí)際的文件。這意味著該文件作為一個(gè)被忽略的文件保留在您的本地系統(tǒng)和工作目錄中。
git status將顯示該文件已不在存儲庫中,而輸入ls命令將顯示該文件存在于本地文件系統(tǒng)中。
如果希望從存儲庫和本地系統(tǒng)中刪除文件,請忽略--cached選項(xiàng)。
接下來,使用git add命令將.gitignore添加到暫存區(qū):
?
git add .gitignore
?
最后,使用git commit命令提交.gitignore文件:
?
git commit -m "update ignored files"
結(jié)尾
?
現(xiàn)在您已經(jīng)知道了忽略Git中的文件和文件夾的基本知識。
希望本文對您有所幫助。
審核編輯:劉清
評論
查看更多