Gitignore 所有不匹配的特定模式
Gitignore all non-matching a particular pattern
我试图在我的 .gitignore
中使用以下内容但无济于事(无论 !
如何,文件都被忽略):
*
!(CODE_OF_CONDUCT|CONTRIBUTING|README).md
!.(editorconfig|github|gitignore|prettierrc|versionrc|vscode)
!(docs|example|LICENSE|src)
!(package|package-lock|(tsconfig.*)).json
有什么方法可以使上述工作正常进行吗?也就是说,匹配和排除除与描述的模式一致的所有内容。
我相信 .gitignore
使用文件名 glob,而不是正则表达式(afaik 也不 extended globbing)。因此,括号、'pipe symbol' (|
) 等没有特殊含义,被解释为文件名的一部分。
不幸的是,我认为没有任何方法可以在模式中表达 or
。您需要按照以下方式做一些事情(我没有包括所有原始文件):
*
!CODE_OF_CONDUCT.md
!CONTRIBUTING.md
!README.md
!.editorconfig
!.github
!.gitignore
!tsconfig.*.json
如果适用,您可以按常用名称部分对一些文件进行分组,例如
!.git*
或他们的扩展名,例如
!*.md
and/or 将模式限制为大写文件名
![ABCDEFGHIJKLMNOPQRSTUVWXYZ]*.md
(注意这与[A-Z]*
不同,因为标准的glob排序AaBbCc
等,所以后者表示除了小写z
之外的所有大小写字符) .
您也可以 'group' 按子目录,但这似乎不适用于您的情况。
见https://git-scm.com/docs/gitignore
编辑:一种间接的方式来做你想做的事情,在你生成文件时使用更紧凑的语法(感谢@jthill):
printf %s\n \!{package,package-lock,tsconfig.*}.json >>.gitignore
但是,这不会缩短生成的文件。
我试图在我的 .gitignore
中使用以下内容但无济于事(无论 !
如何,文件都被忽略):
*
!(CODE_OF_CONDUCT|CONTRIBUTING|README).md
!.(editorconfig|github|gitignore|prettierrc|versionrc|vscode)
!(docs|example|LICENSE|src)
!(package|package-lock|(tsconfig.*)).json
有什么方法可以使上述工作正常进行吗?也就是说,匹配和排除除与描述的模式一致的所有内容。
我相信 .gitignore
使用文件名 glob,而不是正则表达式(afaik 也不 extended globbing)。因此,括号、'pipe symbol' (|
) 等没有特殊含义,被解释为文件名的一部分。
不幸的是,我认为没有任何方法可以在模式中表达 or
。您需要按照以下方式做一些事情(我没有包括所有原始文件):
*
!CODE_OF_CONDUCT.md
!CONTRIBUTING.md
!README.md
!.editorconfig
!.github
!.gitignore
!tsconfig.*.json
如果适用,您可以按常用名称部分对一些文件进行分组,例如
!.git*
或他们的扩展名,例如
!*.md
and/or 将模式限制为大写文件名
![ABCDEFGHIJKLMNOPQRSTUVWXYZ]*.md
(注意这与[A-Z]*
不同,因为标准的glob排序AaBbCc
等,所以后者表示除了小写z
之外的所有大小写字符) .
您也可以 'group' 按子目录,但这似乎不适用于您的情况。
见https://git-scm.com/docs/gitignore
编辑:一种间接的方式来做你想做的事情,在你生成文件时使用更紧凑的语法(感谢@jthill):
printf %s\n \!{package,package-lock,tsconfig.*}.json >>.gitignore
但是,这不会缩短生成的文件。