有没有办法验证 .gitignore 文件,以便快速找到双打路径或不再存在的路径?通常,当项目很小时,这并不是真正必要的,但如果有大量分支和 .gitignore 文件合并,这可以派上用场。
不完全是。
一个可能接近的命令是 git check-ignore
选择一个您知道应该被忽略的文件,并检查以下输出:
git check-ignore -v -- /path/to/ignored/file
您将看到适用的
.gitignore
规则。
2016 年 3 月更新:Git 2.8 将添加一种新方法来调试
.gitignore
文件及其规则。
在允许子文件夹不被忽略的情况下(即使其父文件夹被忽略:参见示例),我发现了这个宝石由Thái Ngọc Duy(
pclouds
) :
:支持追踪排除dir.c
man git
包括:
GIT_TRACE_EXCLUDE:
启用跟踪消息,有助于调试
处理。.gitignore
请参阅“”了解可用的跟踪输出选项。GIT_TRACE
将
GIT_TRACE_EXCLUDE
设置为 1,您将看到(在 git status
之后)stderr 调试消息,例如:
exclude: from ...
exclude: xxx => n/a
exclude: xxx vs. yyy at line z: => www
但是 commit 5e57f9c (合并分支 'nd/exclusion-regression-fix',2016-02-24,Git v2.8.0-rc0 -- merge 在 batch #8 中列出)已恢复,撤销所做的更改到 e79112d (合并分支 'ce/https-public-key-pinning',2016-02-24,Git v2.8.0-rc0 -- merge 列于 batch #8)。
我们将把 nd/exclusion-regression-fix 主题推迟到稍后的周期。
gitster
-- 合并于 commit 5cee349,2016 年 3 月 18 日)
:恢复“合并分支‘nd/exclusion-regression-fix’”5cee349370
您可以编写一个脚本来检查它。我在那里为你做了一个:
#!/bin/bash
set -o noglob
for file in `cat .gitignore | grep -v \#`
do
printf "$file"
find . -name "$file" | wc -l
done
它将显示当前目录中的规则以及匹配的数量并递归。示例:
*.log 31
*.gz 0
*~ 42
*.swp 0
*.aux 33
*.pdf 51
*.out 7
*.toc 6
*.nav 1
*.snm 1
.DS_Store 0
如果需要,您可以通过管道输入
0
将输出限制为包含 egrep "\b0\b"
的行。
为了验证路径中 git 的 ** 模式,我必须受上面脚本的启发编写一行代码:
find . -type f | git check-ignore -v --stdin | perl -pe 's,.*\.gitignore:,,; s,\t," "x100,e' | sort | uniq -w 100 -c | perl -pe 's, {100}.*,,'
不太漂亮,但很有效。