三叉戟,异构项目同步升级工具,The heterogeneous repo sync and upgrade CLI
Project description
trident-sync 三叉戟同步
异构项目同步升级CLI工具
1. 简介
当我们的monorepo项目内部使用了其他模版项目,那么那个模版项目就永远停留在当时的版本,无法方便的更新。
本项目可以自动获取更新并提交PR到你的monorepo仓库,让集成的模版项目保持最新版本。
本项目支持各类异构项目的同步升级
多个模版项目
同步到你项目的多个目录
模版项目的多个目录
同步到你项目的多个目录
你项目的多个目录
同步到多个模版项目
你项目的多个目录
同步到模版项目的多个目录
2. 实现原理
初始化:
- clone源仓库(src)和目标仓库(target)
- 给目标仓库创建并切换到同步分支(sync_branch)
- 将源仓库内的文件复制到目标仓库对应的目录,然后commit、push
- 此时目标仓库内的sync_branch分支拥有源仓库的副本
升级:
- 当源仓库有变更时
- 拉取源仓库更新
- 删除目标仓库对应的目录,复制源仓库所有文件到目标仓库对应的目录
- 此时
git add . && git commit
提交的就是源仓库有变更的那部分内容 - 然后创建
target.sync_branch
->target.main
的PR
- 处理
PR
3. 应用场景
例如:
我有一个 certd 项目,它是一个自动更新ssl证书的工具,但这不是重点。
重点是它一开始只是一个独立的命令行工具。
我通过yarn
的workspace
功能将多个子模块放在一个仓库中管理
它的目录结构如下:
src
| --packages
| --core //实现申请证书的核心
| --plugins //一些任务插件,部署证书到远程服务器、云服务之上。
某一天我想开发v2版本,想把它升级成一个带后台和界面的web项目。
恰好我找到了两个模版项目,可以帮我快速实现以上需求。
- fs-admin-antdv (前端admin模版)
- fs-server-js (服务端)
这时certd
项目目录结构将变成如下:
src
| --packages
| --core
| --plugins
| --ui
| --certd - client //这是fs-admin-antdv的副本
| --certd - server //这是fs-server-js的副本
为了使certd-client
和certd-server
能够随时同步模版项目
的更新
我将使用trident-sync
来自动帮我升级。
4. 快速开始
4.1 准备工作
- 安装 python
- 准备你的项目和要同步的模版项目仓库地址和分支
# 安装本工具
pip install trident-sync
# 创建一个同步目录,用来进行同步操作,你可以任意命名
mkdir project-sync
# 进入目录
cd project-sync
4.2 编写sync.yaml
文件
下载 sync.yaml模版 文件保存到sync
目录
根据注释修改其中的配置
4.3 初始化
初始化会将sync初始化为一个git仓库
然后将sync.yaml
中配置的多个repo
添加为submodule
# 执行初始化操作
trident init
注意:只需运行一次即可,除非你添加了新的
repo
4.4 进行同步
将根据sync.yaml
中sync
配置的同步任务进行同步更新,并提交PR,当你有空时处理PR即可
# 以后你只需要定时运行这个命令,即可保持同步升级
trident sync
4.5 [可选] 保存 project-sync
将project-sync
提交到你的远程服务器,防止更换电脑丢失同步进度
后续你可以在任意位置clone
出project-sync
之后,运行trident sync
即可继续同步
# 执行初始化操作
trident remote --url=<project-sync_git_url>
注意:这个
<project-sync_git_url>
是一个全新的git仓库,用来保存同步进度的
4.5 [可选] 定时运行
你可以将 <project-sync_git_url>
这个远程仓库和 trident sync
命令配置到任何CI/DI
工具(例如jenkins、github
action、drone等)自动定时同步
5. 其他问题:
5.1 为何不fork模版项目,通过submodule来管理
这是我最初采用的方法,确实可以通过set-upstream,然后进行合并来进行同步升级。
但管理众多的submodule仍然是一件费力且很容易出错的事情,比如:
- 想要采用git-flow模式,就得频繁切换所有的submodule的分支
- 想要管控main分支的提交权限,多个submodule相当繁琐
- lerna不支持submodule模块的发布
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for trident_sync-1.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d18523a0d21c9e6b43aaf26552d7ac70c1c22a13136da57effcf6b948fbc60c |
|
MD5 | 7fb76b8db1abd0109193be482a9fa44c |
|
BLAKE2b-256 | fffde47f67f88157a695fd94b292e954f0494ea6beb7c077d2e2c3b45d47df6b |