automattic/ignorefile

处理.gitignore风格文件。

v2.1.0 2024-08-29 19:01 UTC

README

这个小型库允许在PHP中处理.gitignore风格的文件。

遵循gitignore文档,即使在git本身不遵循的情况下也是如此。

安装

需要使用composer require automattic/ignorefile

使用方法

// Read a .myignore file.
$ignore = new IgnoreFile();
$ignore->add( file_get_contents( '.myignore' ) );

// Test if a file is ignored.
if ( $ignore->ignores( $filename ) ) {
        echo "$filename is ignored\n";
} else {
        echo "$filename is not ignored\n";
}

// Filter ignored files from an array of files.
$filesToProcess = $ignore->filter( $allFiles );

// Load all .myignore files in a directory tree, then list all non-ignored files.
$ignore = new IgnoreFile();
$iter = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( '.' ) );
foreach ( $iter as $path ) {
        if ( basename( $path ) === '.myignore' ) {
                $ignore->add( file_get_contents( $path ), dirname( $path ) . '/' );
        }
}

$iter = new RecursiveIteratorIterator(
    $ignore->filterIterator( new RecursiveDirectoryIterator( '.' ) )
);
foreach ( $iter as $file ) {
        echo "$file\n";
}

严格模式

为了匹配git的行为,传递给add()的无效模式将被静默忽略。如果您更希望抛出异常,请将$ignore->strictMode设置为true。

与git的已知不兼容性

截至git 2.43.0。

gitignore文档提到fnmatch关于*?和括号表达式的具体细节。这又反过来引用了几份其他文档。

灵感

我需要一个与npm模块ignore类似的东西用于PHP,但找不到一个。所以我自己写了一个,复制了相当全面的测试集,以确保我的实现是准确的。