上一篇文章,跟大家分享了一下如何让你的mac自动同步代码。
但是在实际应用中发现会有点儿小问题,比如说:
- 如果某一个分支同步失败,会直接退出当前任务,剩下的分支要自己同步。
- 异步抓取错误,导致同步信息不好抓取。
- 使用了
fs
来将错误信息录入到提醒文件中,每次处理的都是覆盖式写入,所以会导致查看不及时,日志丢掉的问题。
本着负责到底的原则,这里跟大家再分享一个改进版。用来改进这些问题。
1. 改进点
首先我们来看下改进点:
- 使用
shell
命令来追加错误日志。 - 使用
spawnSync
代替spawn
来实现同步执行rebase
任务 - 分支同步出现问题后,使用
git rebase --abort
来退出同步,并写入错误日志。
有了改进点,明确了修改点之后,我们来继续看下如何实现这些修改点
2. 改进点实现
2.1 使用模块
之前我们使用了 fs
和 spawn
来实现这个功能。现在我们只需要使用 spawnSync
就可以
栗子:
const spawnSync = require("child_process").spawnSync;
2.2 项目目录和配置
这两项保持不变,还是之前的配置,还是之前的配方
栗子:
// 项目所在文件夹
const rootDir = '/Users/yancy/dev'
// 日志文件
const logFile = '/Users/yancy/Desktop/代码rebase出现问题-请及时查看.txt'
// 配置文件
const pullConfig = [
{
dirName: 'test', // 项目
branchList: [ // 分支列表
'test1',
'test2',
]
}
]
2.3 同步代码
遍历配置文件,并通过 spawnSync
来执行shell 和 git
命令。以此来同步代码
栗子:
pullConfig.forEach(item => {
if (item.branchList.length) {
item.branchList.forEach((branch, index) => {
let shell = getShell(item.dirName, branch)
let ls = spawnSync(shell, {
shell: true }); // 需要注意
checkGit(ls.stdout.toString(), item.dirName, branch)
})
}
})
function getShell(dirName, branch) {
return `
cd ${
rootDir}/${
dirName};
git checkout