忽略檔案
"並不是所有的牛奶都叫特侖蘇",在版本控制系統中也有相似的表達,那就是"並不是所有的檔案都需要提交".
有的是因為沒必要提交,比如日誌檔案,系統快取檔案等,有的是因為不能提交,比如個人隱私檔案,付費文件等.
正常來說,這些檔案都是不應該被提交到版本庫,倘若一不留神提交到版本庫,要麼洩露機密資訊,要是造成經濟損失,要麼對團隊其他人工作造成不便.
有鑑於此,我們應該尋求一種機制來規避事故的發生,在 git
版本控制系統中一般有三種不同的解決方案.
最常用也是最簡單的當屬 .gitignore
檔案,不過先不要著急,我們先了解一下忽略原則和配置規則.
忽略檔案的基本原則
- 忽略作業系統自動生成的檔案,保持不同作業系統的純粹性和整潔度.
- 忽略工具軟體自動生成的檔案,避免因個性化配置而產生的工作障礙.
- 忽略個人隱私配置檔案,除非你願意承擔公開隱私所帶來的潛在風險.
目標: 只提交必要檔案,忽略無用檔案,儘可能考慮多種情況,不給他人制造麻煩.
忽略檔案的配置規則
一行記錄代表一條規則,配置規則僅針對尚未被跟蹤的檔案清單.
# 忽略 `*.a` 檔案
*.a
# 忽略 `*.A` 檔案,但 `somefile.A` 除外.
*.A
!somefile.A
# 忽略 `*.b` 和 `*.B` 檔案
*.[bB]
# 忽略 `*.c` 和 `*.C` 檔案,但 `somefile.C` 除外.
*.[cC]
!somefile.C
# 只忽略 `somepath/` 目錄(包括該目錄下所有檔案),但不忽略 `somepath` 檔案
somepath/
# 只忽略 `somepath/` 一級子目錄下 `*.txt`,但不忽略 `somepath/sub/*.txt` 檔案
somepath/*.txt
# 忽略 `somepath` 檔案和 `somepath` 目錄
somepath
# 只忽略 `somepath` 檔案,但不忽略 `somepath/` 目錄
somepath
!somepath/
# 只忽略當前目錄下的 `somepath` 檔案和目錄,但不忽略子目錄的 `somepath`
/somepath
複製程式碼
說明:
#
開頭表示註釋,!
緊跟某規則之後表示增加例外情況
線上示例和幫助文件
提供兩個不錯的線上示例,可以參考下在什麼場景應該忽略哪些檔案以及如何編寫忽略規則.
執行
git help ignore
命令檢視幫助文件
三種設定方式
git
設定忽略檔案有三種方式,如下:
- 全域性配置檔案(
~/.gitignore
),執行git config --global core.excludesfile ~/.gitignore
命令後適用於所有的版本庫. - 遠端配置檔案(
$PWD/.gitignore
),編輯.gitignore
檔案後適用於遠端和本地版本庫. - 本地配置檔案(
$PWD/.git/info/exlude
),編輯$PWD/.git/info/exlude
檔案後適用於本地版本庫.
最常用方式
三種設定方式中,第二種最為常見,另外兩種大致一樣,重點在於配置檔案如何編寫.
建立 .gitignore
檔案
參考線上示例以及基本語法編寫自定義忽略規則
# General
.DS_Store
.AppleDouble
.LSOverride
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
複製程式碼
提交 .gitignore
檔案
忽略檔案規則配置完畢後,需要將該檔案提交到版本庫,這樣在其他電腦上也能應用相同的忽略規則.
# 新增 `.gitignore`
git add .gitignore
# 提交 `.gitignore`
git commit -m "add .gitignore"
# 上傳 `.gitignore`
git push origin master
複製程式碼
驗證忽略效果
新建 .gitignore
檔案中已忽略的檔案,執行 git status
命令,如果提示 working directory clean
,那麼說明忽略檔案的配置已經生效,如果工作區不乾淨,很遺憾,忽略檔案配置可能並未生效,需要檢查下哪裡配置錯了.
執行 git check-ignore
命令檢查是哪個配置規則寫錯了,從而我們能夠更正相應的配置規則.