[英]Git, set up .gitignore to ignore all files EXCEPT .conf files, including subdirectories too
如何讓Git忽略目錄中的所有文件以及除 .conf 文件之外的子目錄中的所有文件?
目前我在 my.gitignore 中有這個:
!/some/dir/
/some/dir/*
!/some/dir/**/
!/some/dir/**/*.conf
所以,我想忽略 /some/dir/ 及其子目錄中的所有文件,*.conf 文件除外。
但它不會忽略 /some/dir/ 中的任何文件。
例如,/some/dir/somefile 不是忽略,/some/dir/subdir/anotherfile 也不是忽略。 我只想不忽略以下文件:/some/dir/subdir/file.conf。
您可能希望以各種方式對此進行調整,但這是我所知道的最簡單的方法,可以滿足您的要求。 在some/dir
中創建一個.gitignore
文件,內容為:
*
!*/
!*.conf
一切就緒。
這是一個例子:
$ mkdir test-ignore
$ cd test-ignore
$ git init
Initialized empty Git repository in ...
$ echo test ignore rules > README
$ git add README
$ git commit -m initial
[master (root-commit) 33962fc] initial
1 file changed, 1 insertion(+)
create mode 100644 README
$ mkdir -p some/dir/a some/dir/b
$ touch some/dir/file some/dir/a/a.conf some/dir/b/b.conf some/dir/a/ignored
$ cat > some/dir/.gitignore << END
> *
> !*/
> !*.conf
> END
$ git add .
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: some/dir/a/a.conf
new file: some/dir/b/b.conf
$
*
表示忽略所有內容(當然,當前未跟蹤;跟蹤的文件不能被忽略)。*/
表示如果它是一個目錄,不要忽略它,搜索它,並且在文件的后面,這會覆蓋以前的條目; 當然,被搜索並不會添加目錄中的文件,但會掃描子目錄;.* conf
表示如果文件的基本名稱與*.conf
匹配,則不要忽略它,因此some/dir
中名為*.conf
的任何文件,或some/dir
的任何子目錄中名為 * 的任何文件*.conf
,不會被忽略,因此會被添加。 這就是為什么some/dir/a/a.conf
確實被添加了,但some/dir/a/ignored
沒有。
(你沒有在文本中指定你想對some/dir/somefile
和some/dir/thing.conf
做什么,所以我在這里應用了相同的規則: file
被忽略, thing.conf
未被忽略。我認為這就是你想要的.**/* conf
。)
通常,將.gitignore
文件“沿樹”盡可能地移動會簡化它,因此將其放在some/dir/.gitignore
中會更容易。 一般規則*/
足夠接近.gitignore
的末尾,強制 Git 不要短路遞歸找到的子目錄的掃描。 除了這兩個規則(應該很明顯,但起初並不總是很明顯)之外,rest 很明顯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.