我遇到的问题是git check-ignore
不尊重.gitignore
的'不'(!
)规则。如果文件与.gitignore
文件中的任何条目匹配,它将返回“Ignored”,无论该条目是否告诉它不要忽略该路径(通过!
运算符)
git check-ignore
's documentation表示返回代码映射如下:
退出状态
- 0 :忽略一个或多个提供的路径。
- 1 :不会忽略所提供的路径。
- 128 :遇到致命错误。
这与我在添加“请勿忽略”规则时所看到的情况不符,即在条目前粘贴!
。
举个例子,让我们按如下方式创建一个文件结构:
.gitignore
files/
path-not-ignored
ignored-files/
path-ignored
path-not-ignored
和.gitignore
包含:
ignored-files/*
!ignored-files/path-not-ignored
根据文档,我希望files/
和ignored-files/path-not-ignored
中的文件返回退出状态1(不会被忽略),ignored-files/path-is-ignored
返回0(忽略)。< / p>
我看到的是ignored-files
中返回退出状态0(忽略)的所有内容:
File | Expected exit status | Actual exit status | Summary
-------------------------------- | -------------------- | ------------------ | -------
`files/path-not-ignored` | 1 (Not ignored) | 1 (Not ignored) | Expected
`ignored-files/path-ignored` | 0 (Ignored) | 0 (Ignored) | Expected
`ignored-files/path-not-ignored` | 1 (Not ignored) | 0 (Ignored) | Unexpected
(正在使用git check-ignore <file>;echo $?
)
这与Git的内部行为不符,因为我可以git add add ignored-files/path-not-ignored
就好了:
File | `git add`? | Matches `git check-ignore` output?
-------------------------------- | ---------------------------- | ----------------------------------
`files/path-not-ignored` | Adds file (as expected) | Yes
`ignored-files/path-ignored` | Throws warning (as expected) | Yes
`ignored-files/path-not-ignored` | Adds file (as expected) | No
git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: files/path-not-ignored
new file: ignored-files/path-not-ignored
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
由于git check-ignore
在这种情况下不可靠,是否还有其他命令可用于检查Git是否忽略/不忽略给定文件?
返回退出代码的东西是理想的,因为我在bash脚本中使用它。
答案 0 :(得分:0)
从2017年7月开始使用Git 2.18(2018年7月)检查问题是否仍然存在。
Commit d60771e可能有助于消除误报。
check-ignore
:修复目录和其他文件类型的混合在
check_ignore()
中,第一个pathspec项确定任何对象的dtype。 随后的。
这意味着,与常规文件匹配的pathspec可以防止在匹配目录时遵循以下pathspec,这毫无意义。