.gitignore否定不起作用

vxf3dgd4  于 2023-11-15  发布在  Git
关注(0)|答案(2)|浏览(116)

我用的是msysgit 1.9.4。
我的.gitignore文件,在repo的根目录下,看起来像这样:

build/
a/b/
!a/c/d/e/**/build/

字符串
我的意图是,所有的build/目录都被忽略,除非它们是a/c/d/e/的子目录(任何深度)。但是a/c/d/e/f/build/仍然被Git忽略。
我错过了什么?

yptwkmov

yptwkmov1#

gitignore的一般规则很简单:

It is not possible to re-include a file if a parent directory of that file is excluded.

要从被忽略的文件夹build的子文件夹中排除文件(或所有文件),您需要先排除文件夹,再排除 * 文件:
我测试过:

**/build/
a/b/
!a/c/d/e/**/build/     <== whitelist folder first
!a/c/d/e/**/build/**   <== then the files

字符串

pkwftd7m

pkwftd7m2#

例如:您忽略了/node_modules/文件夹。但您想添加一个需要修补的文件。这是要列入白名单的文件:/node_modules/x/y/z/file.js
将以下内容添加到.gitignore文件的末尾:

/**
!/node_modules
!/node_modules/x
!/node_modules/x/y
!/node_modules/x/y/z
!/node_modules/x/y/z/file.js

字符串
第一行(/**)很重要-不知道它是如何工作的:-)

相关问题