簡體   English   中英

遞歸地忽略特定目錄中的所有文件(.json文件除外)

[英]Recursively ignore all files inside a specific directory except .json files

我的文件結構類似於以下文件結構:

foo/bar.foo
node_modules/foo/bar.json
node_modules/foo/bar/foo.bar

我想做的是忽略node_modules文件夾內除json文件之外的所有文件,以便在存儲庫中得到以下文件結構:

foo/bar.foo
node_modules/foo/bar.json

我試圖找到一種簡單的方法來做到這一點,但我還沒有到那兒。

這是我在.gitignore

# ignore everything inside node_modules
node_modules/*

# But descend into directories
!node_modules/**/*.json

達到預期效果的最優雅方法是什么?

PS我不知道我在做什么。

gitignore文檔中,它們指出:

如果排除該文件的父目錄,則無法重新包含該文件。

這為您的規則失敗的原因提供了直覺。 您可以使用一些xargs魔術來手動添加缺少的json文件。 每當添加新程序包時,您都必須運行此程序,但是一旦跟蹤它們,一切都會正常進行。

 find node_modules/* -name *.json -print |xargs git add -f

我使用Git 2.18.0進行了測試,並確認以這種方式添加后,被忽略目錄中的文件可以正常工作。 對於您的.gitignore規則所排除的更深層路徑,上面的-f參數是必需的。

您必須首先不要忽略(排除)被忽略目錄的子文件夾。

# ignore everything inside node_modules
node_modules/**

# exclude or whitelist subfolders: note the trailing /

!node_modules/**/

# But descend into directories
!node_modules/**/*.json

請使用git check-ignore -v -- afile來檢查哪個規則仍然會忽略您的文件。
並確保這些文件未添加到索引中( git rm --cached -r node_modules

好的,所以我終於找到了解決方案。 訣竅如下:

# Ignore all the files inside the node_modules folder
node_modules/**/*.*

# Allow only json files inside the node_modules folder
!node_modules/**/*.json

問題是通過執行node_modules/* ,它不僅會忽略文件,還會忽略文件夾。

正如git doc所說:

如果排除該文件的父目錄,則無法重新包含該文件。

因此,相反,我做了node_modules/**/*.* ,它僅排除文件而不包括文件夾。

這樣, !node_modules/**/*.json實際上就能將json文件列入白名單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM