cpsit/migrator

用于通过计算差异迁移文件的Composer包

0.1.6 2023-12-29 13:42 UTC

This package is auto-updated.

Last update: 2024-09-20 16:46:18 UTC


README

Screenshot

Migrator

Coverage Maintainability Tests CGL Latest Stable Version Total Downloads License

📦 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表示。以下是一些当前可用的实现:

差异

差异是通过Diff\Differ\Differ的实现来计算的。以下是一些当前可用的实现:

格式化器

可以使用格式化器来正确显示计算出的 Diff\DiffResult。每个格式化器都实现了 Formatter\Formatter。以下是一些当前可用的实现:

  • CliFormatter 用于命令行。它使用 ANSI 颜色显示计算出的差异,针对 Symfony 的控制台输出。
  • TextFormatter 可以用于命令行以外的其他环境,例如在 ANSI 颜色不可用的情况下,正确显示计算出的差异。

💻 贡献

请查阅 CONTRIBUTING.md

⭐ 许可证

此项目受 GNU 通用公共许可证 3.0(或更高版本) 许可。