git 中怎樣忽略文件和目錄
Git 是一個流行的版本控制系統。它是開發人員如何在項目中協作和工作的方式。
Git 允許您跟蹤隨着時間推移對項目所做的更改。除此之外,如果您想撤消更改,它還允許您恢復到以前的版本。
Git 的工作方式是使用Git add
命令在項目中暫存文件,然後使用Git commit
命令提交文件。
當你作爲團隊的一員在一個項目中工作時,有時你不想與他人共享項目的某些文件或部分內容。
換句話說,您不希望將這些特定的文件包含或提交到項目的主版本。這就是爲什麼你可能不想使用git add .
命令將當前 git 目錄中的每一個文件進行升級。
當你使用git commit
命令時,每個文件都會被提交——這也包括不需要或不應該提交的文件。
你可能希望 Git 忽略特定的文件,但是沒有Git ignore
命令來實現這個目的。
那麼,如何告訴 Git 忽略並不跟蹤特定的文件呢? 使用.gitignore
文件。
在本文中,您將瞭解什麼是.gitignore
文件,如何創建一個文件,以及如何使用它來忽略文件和文件夾。您還將看到如何忽略之前提交的文件。
什麼是. gitignore 文件?.gitignore 文件的用途是什麼?
當前運行的 Git 存儲庫中的每個文件都有以下狀態之一:
-
tracked
- 這些是 Git 所知道的所有文件或目錄。這些是新暫存 (用git add
添加的) 和提交 (用git commit
提交的) 到主倉庫的文件和目錄。 -
untracked
- 這些是在工作目錄中創建的任何新文件或目錄,但還沒有暫存 (或使用 git add 命令添加)。 -
ignored
- 這些是 Git 在 Git 存儲庫中完全排除、忽略和不知道的所有文件或目錄。從本質上說,這是一種告訴 Git 哪些未跟蹤的文件應該保持不跟蹤且永遠不提交的方式。
所有被忽略的文件都被放置在.gitignore
文件裏。
.gitignore
文件是一個純文本文件,它包含來自項目的所有指定文件和文件夾的列表,Git 應該忽略和不跟蹤這些文件和文件夾。
在.gitignore
內部,您可以通過提到特定文件或文件夾的名稱或模式,告訴 Git 只忽略單個文件或文件夾。您還可以使用相同的方法告訴 Git 忽略多個文件或文件夾。
創建一個. gitignore 文件
通常,.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"
結尾
現在您已經知道了忽略 Git 中的文件和文件夾的基本知識。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ASjCpgBZ1ud4FhO0OVYC9A