基于 TOGoS/PHPGitIgnore 用于解析和应用 .gitignore 类规则的实现
1、现阶段存在一个文件夹,其中包含一个类似于 .gitignore 的配置文件:.themeignore,其内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | node_modules/* npm-debug.log yarn-error.log *.bak *.swp *.map *.LICENSE.txt .DS_Store css/* fixtures/* images/* js/* mix/* modules/*/images/* modules/*/js/* .browserslistrc .env .env.* .themeignore babel.config.json jsconfig.json package.json postcss.config.js README.md tailwind.config.js webpack.mix.js |
2、需要基于此文件配置将一些文件忽略掉,仅纳入需要的文件。比如说:过滤掉 node_modules/* 。如图1
3、基于 Composer 安装 togos/gitignore
1 2 3 4 5 6 7 8 9 10 11 | PS E:\wwwroot\object> composer require togos/gitignore Info from https://repo.packagist.org: #StandWithUkraine Using version ^1.1 for togos/gitignore ./composer.json has been updated Running composer update togos/gitignore Loading composer repositories with package information Updating dependencies Lock file operations: 2 installs, 0 updates, 0 removals - Locking demo/facebook-conversions-api (2.2.0) - Locking togos/gitignore (1.1.1) Writing lock file |
4、最终参考 /vendor/togos/gitignore/src/test/php/TOGoS/GitIgnore/FileFinderTest.php 实现如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | use TOGoS_GitIgnore_FileFinder; use TOGoS_GitIgnore_Ruleset; protected $results ; public function addResult( $f , $result ) { $this ->results[ $f ] = $result ; } /* 测试忽略文件 */ $rules1Content = file_get_contents ( 'E:/wwwroot/object/resources/views/theme/.themeignore' ); $finder = new TOGoS_GitIgnore_FileFinder( array ( 'ruleset' => TOGoS_GitIgnore_Ruleset::loadFromString( $rules1Content ), 'invertRulesetResult' => false, 'defaultResult' => false, 'includeDirectories' => false, 'callback' => array ( $this , 'addResult' ) )); $this ->results = array (); $finder ->findFiles( 'E:/wwwroot/object/resources/views/theme' ); var_dump( $this ->results); exit ; |
5、打印 $this->results,结果如下,符合预期。文件路径所对应的值为 true,则表示此路径对应的文件为忽略。如图2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | array(685) { [".browserslistrc"]=> bool(true) [".env"]=> bool(true) [".env.development"]=> bool(true) // ... ["tailwind.config.js"]=> bool(true) ["theme.json"]=> bool(false) ["webpack.mix.js"]=> bool(true) } |
6、可以基于老的目录再生成一个新的干净的目录,只需要遍历目录时,基于 $this->results 判断即可。
近期评论