验证 .gitignore 文件的方法

21

有没有一种方法可以验证.gitignore文件,以便快速查找重复的路径或不再存在的路径?通常,在项目很小的时候,这并不是必需的,但是在有许多分支和合并.gitignore文件的情况下,这可能会派上用场。

3个回答

26

不完全正确。
可能比较接近的一个命令是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: 支持跟踪 exclude

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

2

你可以编写脚本来检查它。我已经为您制作了一个:

#!/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"中来实现。

这里假设 find 的通配符匹配与 git 的 .gitignore 通配符匹配相同。这个假设是否安全? - Lombard
公平地说,我还没有检查过。我也很少使用像否定或双 * 这样的花哨东西。但对于标准的 * 通配符而言,它应该可以正常工作。 - M'vy

1
为了验证路径中 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}.*,,'

不算太漂亮,但它能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接