git中 gitignore 忽略檔案操作

2022-10-14 12:14:04

通常,.gitignore檔案被放置在儲存庫的根目錄中。根目錄也稱為父目錄和當前工作目錄。根資料夾包含組成專案的所有檔案和其他資料夾。也就是說,您可以將它放在儲存庫中的任何資料夾中。你甚至可以有多個.gitignore檔案。

在macOS或者Linux系統中建立.gitignore檔案可以使用命令列,開啟終端,然後使用cd命令導航到包含專案的根資料夾,並輸入以下命令為您的目錄建立一個.gitignore檔案:

>touch .gitignore


預設情況下,名稱前面帶點(
.)的檔案是隱藏的。

單獨使用ls命令時,隱藏檔案是不可見的。要從命令列檢視所有檔案,包括隱藏檔案,使用-a標誌和ls命令,如下所示:

>ls -a

 


.gitignore檔案包含的內容

 

你應該考慮新增到.gitignore檔案中的檔案型別是不需要提交的任何檔案。出於安全原因,您可能不希望提交它們,或者因為它們對您來說是原生的,因此對於與您從事同一專案的其他開發人員來說是不必要的。

以下這些內容可能會包含在檔案中:

  • 作業系統檔案。每個作業系統(如macOS、Windows和Linux)都會生成特定於系統的隱藏檔案,其他開發人員不需要使用這些檔案,因為他們的系統也會生成這些檔案。例如,在macOS上,Finder生成一個. ds_store檔案,其中包括使用者對資料夾外觀和顯示的偏好設定,例如圖示的大小和位置。

  • 由程式碼編輯器和IDE (IDE代表整合式開發環境)等應用程式生成的組態檔。這些檔案是根據您、您的設定和您的偏好設定設定客製化的。

  • 從專案中使用的程式語言或框架自動生成的檔案,以及編譯後的特定於程式碼的檔案,如.o檔案。

  • 包管理器生成的資料夾,比如npm的node_modules資料夾。這是一個用於儲存和跟蹤本地安裝的每個包的依賴項的資料夾。

  • 包含敏感資料和個人資訊的檔案。此類檔案的一些例子是帶有您的憑證(使用者名稱和密碼)的檔案和帶有環境變數的檔案,如.env檔案(.env檔案包含需要保持安全和私有的API金鑰)。

  • 執行時檔案,如.log檔案。它們提供關於作業系統的使用活動和錯誤的資訊,以及作業系統中發生的事件的歷史記錄。

如何忽略Git中的檔案和資料夾 

如果您只想忽略一個特定的檔案,則需要提供從專案根目錄到該檔案的完整路徑。

例如,如果你想忽略根目錄下的一個text.txt檔案,你可以這樣做:

>/text.txt

 

如果您想忽略位於根目錄下test目錄中的text.txt檔案,您可以執行以下操作:

>/test/text.txt

 

上面內容也可這樣寫:

>test/text.txt

 

如果您想要忽略所有具有特定名稱的檔案,則需要寫入檔案的字面名稱。

例如,如果你想忽略任何text.txt檔案,你可以在.gitignore中新增以下內容:

>text.txt

 

在這種情況下,您不需要提供特定檔案的完整路徑。此模式將忽略位於專案中任何位置的具有該特定名稱的所有檔案。

要忽略一個完整的目錄及其所有內容,你需要在目錄名的最後加上斜槓/:

>test/

 

該命令將忽略位於專案中任何位置的名為test的目錄(包括該目錄中的其他檔案和其他子目錄)。

需要注意的是,如果只寫檔案的名稱,或者只寫目錄的名稱而不加斜槓/,那麼該模式將匹配具有該名稱的任何檔案或目錄:

# matches any files and directories with the name test
>test

 

如果您想忽略以特定單詞開頭的任何檔案或目錄,該怎麼辦?

假設您希望忽略所有名稱以img開頭的檔案和目錄。要做到這一點,你需要指定你想要忽略的名稱,後面跟著*萬用字元選擇器,就像這樣:

>img*

 

該命令將忽略所有名稱以img開頭的檔案和目錄。

但是,如果您想忽略任何以特定單詞結尾的檔案或目錄,該怎麼辦呢?

如果希望忽略以特定副檔名結尾的所有檔案,則需要使用*萬用字元選擇器,後面跟著要忽略的副檔名。

例如,如果你想忽略所有以.md副檔名結尾的markdown檔案,你可以在.gitignore檔案中新增以下內容:

>*.md

 

該模式將匹配專案中任何以.md擴充套件名結尾的檔案。

前面介紹瞭如何忽略以特定字尾結尾的所有檔案。如果您想要做一個例外,並且有一個帶有該字尾的檔案不想忽略,會發生什麼情況呢?

假設你在.gitignore檔案中新增了以下內容:

.md

 

該模式忽略所有以.md結尾的檔案,但您不希望Git忽略README.md檔案。

要做到這一點,您需要使用帶有感嘆號的否定模式,!,來使該檔案失效,否則該檔案將會被忽略:

# ignores all .md files
.md

# does not ignore the README.md file
!README.md

 

對於.gitignore檔案中的這兩種模式,所有以.md結尾的檔案都會被忽略,除了README.md檔案。

要注意的是,如果忽略整個目錄,此模式將不起作用。

假設你忽略了所有的測試目錄:

test/

假設在一個測試資料夾中,有一個檔案,例如.Md,你不想忽視的。

不能像這樣對一個被忽略的目錄中的檔案進行否定:

# ignore all directories with the name test
test/

# trying to negate a file inside an ignored directory won't work
!test/example.md

 


如何忽略之前提交的檔案

 

最好的做法是建立一個.gitignore檔案,其中包含建立新儲存庫時要忽略的所有檔案和不同的檔案模式——在提交之前。

Git只能忽略尚未提交到儲存庫的未跟蹤檔案。

如果您在過去已經提交了一個檔案,但希望沒有提交該怎麼辦?

假設您不小心提交了一個儲存環境變數的.env檔案。

你首先需要更新.gitignore檔案以包含.env檔案:

# add .env file to .gitignore
echo ".env" >> .gitignore

 

現在,你需要告訴Git不要跟蹤這個檔案,把它從索引中刪除(如果是資料夾需要新增-r選項):

git rm --cached .env

 

git rm命令和--cached選項一起從儲存庫中刪除檔案,但不刪除實際的檔案。這意味著該檔案作為一個被忽略的檔案保留在您的本地系統和工作目錄中。

git status將顯示該檔案已不在儲存庫中,而輸入ls命令將顯示該檔案存在於本地檔案系統中。

如果希望從儲存庫和本地系統中刪除檔案,請忽略--cached選項。

接下來,使用git add命令將.gitignore新增到暫存區:

git add .gitignore

 

最後,使用git commit命令提交.gitignore檔案:

git commit -m "update ignored files"