cpsit / migrator
用于通过计算差异迁移文件的Composer包
0.1.6
2023-12-29 13:42 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- cypresslab/gitelephant: ^4.5
- symfony/console: ^5.4 || ^6.0 || ^7.0
- symfony/filesystem: ^5.4 || ^6.0 || ^7.0
- symfony/finder: ^5.4 || ^6.0 || ^7.0
Requires (Dev)
- armin/editorconfig-cli: ^1.6 || ^2.0
- cpsit/php-cs-fixer-config: ^1.1
- ergebnis/composer-normalize: ^2.30
- friendsofphp/php-cs-fixer: ^3.29
- phpstan/extension-installer: ^1.2
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-strict-rules: ^1.5
- phpstan/phpstan-symfony: ^1.2
- phpunit/phpunit: ^10.1
- rector/rector: ^0.16 || ^0.17 || ^0.18
README
Migrator
📦 Packagist | :floppy_disk: 仓库 | :bug: 问题跟踪器
A PHP库,用于使用三路合并对两个代码库之间执行迁移,使用计算差异。使用cypresslab/gitelephant
包进行任何Git操作,并提供自定义差异实现接口。
🚀 特点
- 自动文件内容迁移
- 源代码库和目标代码库的各种实现
- 自定义差异实现接口
🔥 安装
composer require cpsit/migrator
⚡ 使用
命令行
vendor/bin/migrator [options] <base-directory> <source-directory> <target-directory>
可用选项
--dry-run
不执行迁移,但只计算并显示代码库之间的差异--verbose
显示计算出的差异(隐式启用--dry-run
)
PHP
use CPSIT\Migrator\Diff; use CPSIT\Migrator\Formatter; use CPSIT\Migrator\Migrator; use CPSIT\Migrator\Resource; // Base contains all files that should be migrated $base = new Resource\Collector\DirectoryCollector('/path/to/base/directory'); // Source and target define the code bases // that are used to generate a diff $source = new Resource\Collector\DirectoryCollector('/path/to/old/revision/files'); $target = new Resource\Collector\DirectoryCollector('/path/to/current/revision/files'); // Decide whether to actually perform migrations // or just calculate a diff between the code bases $performMigrations = true; // Create differ, migrator and formatter $differ = new Diff\Differ\GitDiffer(); $migrator = new Migrator($differ, $performMigrations); $formatter = new Formatter\TextFormatter(); // Migrate files in your base directory $diffResult = $migrator->migrate($source, $target, $base); // Format diff echo $formatter->format($diffResult);
🎢 架构
生命周期
要生成两个代码库之间的差异,您必须提供两个资源集合。例如,这可以是包含旧版本模板文件的目录与包含当前版本模板文件的目录之间的比较。此外,您还必须提供包含所有要迁移文件的基目录。
迁移是通过差异计算器计算的。它将生成并应用三路合并策略来生成和应用两个代码库和提供的基文件之间的差异。
资源
所有相关的代码库(源和目标)都必须由一个Resource\Collector\CollectorInterface
表示。以下是一些当前可用的实现:
ArrayCollector
将所有相关资源存储在一个简单的数组中。CallbackCollector
通过配置的回调函数提供所有相关资源。ChainedCollector
保存多个收集器,它们按顺序调用。DirectoryCollector
在配置的基目录内提供所有相关资源。FileCollector
提供单个文件作为资源集合。
差异
差异是通过Diff\Differ\Differ
的实现来计算的。以下是一些当前可用的实现:
GitDiffer
使用原生的 Git 二进制文件来创建差异。这是通过优秀的库cypresslab/gitelephant
实现的。
格式化器
可以使用格式化器来正确显示计算出的 Diff\DiffResult
。每个格式化器都实现了 Formatter\Formatter
。以下是一些当前可用的实现:
CliFormatter
用于命令行。它使用 ANSI 颜色显示计算出的差异,针对 Symfony 的控制台输出。TextFormatter
可以用于命令行以外的其他环境,例如在 ANSI 颜色不可用的情况下,正确显示计算出的差异。
💻 贡献
请查阅 CONTRIBUTING.md
。
⭐ 许可证
此项目受 GNU 通用公共许可证 3.0(或更高版本) 许可。