如何否定包含空格的 gitignore 模式?

如何否定包含空格的 gitignore 模式?

我的 .gitignore首先排除所有内容,然后否定我想要包含的所有内容,以避免出现大量噪音git status

*
!awesome/
!calibre/
[…]

但是,安装 Visual Studio Code 后,我似乎无法否定目录“Code - OSS”的匹配。我尝试过以下几行:

!Code - OSS/
!Code\ -\ OSS/
!'Code - OSS/'
!"Code - OSS/"
!Code*

尽管我的 .gitignore 底部的所有这些行git status仍然没有将该目录列为可包含的目录。


git check-ignore --verbose Code\ -\ OSS每一行的输出也很奇怪:

.config/.gitignore:22:!Code - OSS/  Code - OSS
.config/.gitignore:22:!Code\ -\ OSS/    Code - OSS
.config/.gitignore:1:*  Code - OSS
.config/.gitignore:1:*  Code - OSS
.config/.gitignore:22:!Code*    Code - OSS

答案1

看起来这是一个错误。测试用例:

$ cd "$(mktemp --directory)"
$ mkdir foo\ bar
$ touch foo\ bar/test
$ git init
Initialized empty Git repository in /tmp/tmp.iGmBR6y2xR/.git/
$ git status --short 
?? foo bar/
$ cat > .gitignore << EOF
> *
> !foo bar
> !foo\ bar
> !"foo bar"
> "!foo bar"
> !foo bar/
> !foo\ bar/
> !"foo bar/"
> "!foo bar/"
> EOF
$ git status --short 
[no output]

解决方法/反测试用例:

$ cat > .gitignore << EOF
> */
> !foo\ bar/
> EOF
$ git status --short 
?? .gitignore
?? foo bar/

相关内容