没有不值得去解决的问题,也没有不值得去学习的技术!

基于 TOGoS/PHPGitIgnore 用于解析和应用 .gitignore 类规则的实现

打印 $this->results,结果如下,符合预期。文件路径所对应的值为 true,则表示此路径对应的文件为忽略
1、现阶段存在一个文件夹,其中包含一个类似于 .gitignore 的配置文件:.themeignore,其内容如下


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
需要基于此文件配置将一些文件忽略掉,仅纳入需要的文件。比如说:过滤掉 node_modules/*
图1
3、基于 Composer 安装 togos/gitignore


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 实现如下


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
打印 $this->results,结果如下,符合预期。文件路径所对应的值为 true,则表示此路径对应的文件为忽略
图2


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 判断即可。  

需要长期技术维护或远程问题排查?

我是拥有 15+ 年经验的 PHP / Go 后端工程师,长期关注已有系统维护、Bug 修复、性能优化、服务器排查、WordPress 网站维护和小功能迭代。

如果你的项目遇到以下情况,可以先从一次小问题排查开始合作:

  • ✅ PHP / Laravel / Yii2 老项目无人维护
  • ✅ Go / Gin 后端接口需要排查或优化
  • ✅ WordPress 网站访问慢、报错或插件冲突
  • ✅ Nginx / MySQL / Redis / Linux 服务器异常
  • ✅ CDN / Cloudflare / DNS / HTTPS 配置问题
  • ✅ 需要长期远程技术支持或兼职维护

更多介绍请查看:关于我 & 合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理