version-control: node下的版本管理模块(svn & git)

最近在开发一个构建工具,需要操作版本管理系统,实现代码提交(如:svn add, svn commit…),GitHub上有类似的库,但存在两个问题:

  1. 长久没人维护,使用人数较少;
  2. 只支持git或svn;

基于我需要兼容git和svn,于是自己简单实现一个版本管理模块:version-control,下面将简单记录一下设计中的一些考虑和遇到的一些问题。

由于开发时间有限和本人使用场景较为简单,若你想使用version-control,请先自行评估是否能满足你的需求,当然作为开源项目,欢迎提issue,发PR。

目录

  1. 【思路】node下的版本管理模块实现;
  2. 【思路】 如何优雅兼容svn和git操作;
  3. 【问题】中文显示的问题;
  4. 【问题】svn本地版本和线上服务器版本不一致问题;
  5. 【问题】svn 如何add所有文件;
  6. 【问题】svn log没有显示刚刚commit的信息;
  7. 【TODO】

一、node下的版本管理模块实现思路

回想我们在没有GUI版本管理工具的时候是怎么进行版本操作的:敲命令行,于是自然想到实现思路:基于node执行指定命令行来实现版本操作

这里要注意的是,Windows下在命令行中不一定有git或者svn的执行环境,需要安装额外的安装包,由于Mac OS暂时没有这个问题,所以我还没有做处理。

// node执行命令
const child_process = require('child_process');

module.exports = (command, cwd) => new Promise((resolve, reject) => {
   
  child_process.exec(command, {
    cwd }, (err, stdout) => {
   
    if (err) reject(err);
    else resolve(stdout);
  });
});

二、如何优雅兼容svn和git操作

凡是说到兼容,我就会想到抽象,站在用户的角度,要完成的任务是版本管理,并不太在意具体用哪些命令。于是我从svn和git操作中跳脱出来,只关心用户需要,针对用户需要,梳理出以下几个接口:

  1. 查看当前文件修改状态:VersionControl.status
  2. 更新代码:VersionControl.update
  3. 提交代码:VersionControl.commit
  4. 版本回退:VersionControl.revert

确定了抽象接口之后,我采用动态引入的方式兼容svn和git,并在架构上进行作用域隔离,单独维护svn操作逻辑和git操作逻辑:

VersionControl在实例化的时候判断用户需要svn还是git,根据用户需要引入底层实现,最后在对外接口中调用具体的底层实现来实现svn和git兼容。

/**
 * VersionControl
 * 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值