monorepo-sync-files
v1.0.2
Published
Monorepo 项目间文件同步工具 - 交互式 CLI
Maintainers
Readme
🔄 Monorepo 文件同步工具
用于在 monorepo 项目的不同应用之间同步 Git 提交的文件改动的交互式 CLI 工具。
功能特性
- 📦 支持全局安装,开箱即用
- 🔍 选择最近的 Git 提交记录
- ✅ 自动处理新增文件
- ⚠️ 智能冲突检测(生成 Git 风格的冲突标记)
- 🎨 美观的交互式命令行界面
- 🚀 不中断流程,批量处理所有文件
安装
pnpm add -g monorepo-sync-files@latest使用方法
在 monorepo 项目根目录运行:
sync-files交互流程
工具会自动扫描 apps/ 目录下的所有项目,无需手动配置。
- 选择源项目:选择要同步文件的来源项目
- 选择远端分支:选择要同步的 Git 分支
- 自动确定目标项目:自动选择另一个项目作为目标
- 多选提交记录:从最近的提交中选择要同步的提交(可多选)
- 确认执行:确认后开始同步文件
使用示例
$ sync-files
🔄 Monorepo 文件同步工具
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
? 选择源项目 (要同步的文件来源): app1
✓ 目标项目: app2
? 选择要同步的远端分支: main
✓ 找到 10 个最近的提交
? 选择要同步的提交 (空格选择,回车确认):
❯ ◉ abc123d - feat: 添加新组件 (开发者A, 2024-12-02)
◉ def456e - fix: 修复样式问题 (开发者B, 2024-12-01)
◯ ghi789f - refactor: 重构工具函数 (开发者C, 2024-11-30)
? 确认将 app1 的 2 个提交同步到 app2? Yes
⏳ 开始同步文件...
📁 共发现 4 个文件需要处理...
✓ 新增: src/components/NewComponent.tsx
⚠ 冲突: src/utils/helper.ts
✓ 新增: src/hooks/useCustom.ts
- 跳过: src/types/index.ts (内容相同)
✔ 同步完成!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 同步统计:
✅ 新增文件: 2 个
⚠️ 冲突文件: 1 个
➖ 跳过文件: 1 个
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 以下文件存在冲突,需要手动解决:
1. apps/app2/src/utils/helper.ts
💡 提示:
- 在编辑器中搜索 <<<<<<< 找到冲突位置
- 手动选择保留的内容
- 删除冲突标记后保存
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━冲突处理
当目标项目中存在同名文件且内容不同时,工具会生成带 Git 风格冲突标记的文件:
<<<<<<< SOURCE (commit: abc123d - feat: 添加新功能)
// 源文件的内容
export const newFunction = () => {
return 'new'
}
=======
// 目标文件的原有内容
export const oldFunction = () => {
return 'old'
}
>>>>>>> TARGET (current)你需要:
- 在编辑器中打开冲突文件
- 手动选择要保留的内容
- 删除冲突标记(
<<<<<<<、=======、>>>>>>>) - 保存文件
排除规则
工具会自动排除以下文件和目录:
node_modules/.next/dist/build/.git/*.logpackage-lock.jsonpnpm-lock.yamlyarn.lock.turbo/coverage/
项目结构
monorepo-sync-files/
├── package.json # 依赖管理
├── tsconfig.json # TypeScript 配置
├── .gitignore # 忽略 node_modules
├── index.ts # 主入口
├── src/
│ ├── git-utils.ts # Git 操作工具
│ ├── file-sync.ts # 文件同步逻辑
│ ├── types.ts # TypeScript 类型
│ └── config.ts # 配置(排除规则、项目列表)
├── README.md # 本文档
├── CHANGELOG.md # 更新日志
└── QUICKSTART.md # 快速开始技术栈
- inquirer: 交互式命令行界面
- simple-git: Git 操作
- chalk: 控制台颜色美化
- ora: 加载动画
- tsx: 运行 TypeScript 脚本
注意事项
- ⚠️ 请在执行同步前确保有备份或已提交当前工作
- ⚠️ 冲突文件需要手动解决,工具不会自动合并
- ⚠️ 建议在同步后进行充分测试
- ⚠️ 同步操作会覆盖目标项目中的同名文件(生成冲突标记)
故障排除
提示找不到 Git 仓库
确保你在项目根目录(包含 .git 文件夹)运行命令。
获取提交历史失败
检查选择的项目目录是否存在且是有效的 Git 仓库。
依赖安装失败
手动安装依赖:
pnpm install
# 或
npm installLicense
MIT
