本文主要是介绍node 自动复制粘贴并提交git,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
const fs = require('fs')
let utils = require('./utils')
/**
* 允许被复制的文件后缀列表
* @type {string[]}
*/
const copyExt = ['.html', '.php']
/**
* 复制一个文件夹下的文件到另一个文件夹
* @param src 源文件夹
* @param dst 目标文件夹
*/
const copyDir = function (src, dst) {
// 读取目录中的所有文件/目录
fs.readdir(src, function (err, paths) {
if (err) {
throw err
}
utils.emptyDir(dst)
paths.forEach(function (path) {
const _src = src + '/' + path
const _dst = dst + '/' + path
let readable
let writable
fs.stat(_src, function (err, st) {
if (err) {
throw err
}
// 判断是否为文件
if (st.isFile()) {
// 允许的后缀才可以被复制
// if (utils.contains(copyExt, _src)) {
// // 创建读取流
// readable = fs.createReadStream(_src)
// // 创建写入流
// writable = fs.createWriteStream(_dst)
// // 通过管道来传输流
// readable.pipe(writable)
// } else {
//
// // console.log(_src + ' 不允许被复制!!!')
// }
setTimeout(() => {
// 创建读取流
readable = fs.createReadStream(_src)
// 创建写入流
writable = fs.createWriteStream(_dst)
// 通过管道来传输流
readable.pipe(writable)
}, 500)
}
// 如果是目录则递归调用自身
else if (st.isDirectory()) {
utils.exists(_src, _dst, copyDir)
}
})
})
})
}
// 打包后的git本地仓库的路径
const cwd = '/Users/ff/Desktop/git1/h5_build'
// 被复制的目录
utils.exists('/Users/ff/Desktop/git2/web/unpackage/dist/build/h5', cwd, copyDir)
const exec = require('child_process').exec
// 执行提交git
function autoGit () {
exec('git add .', { cwd }, function (error, stdout, stderr) {
if (error) {
errIndexLock(stderr)
console.log(stdout)
console.log(`git add 失败${stderr}`)
return false
}
console.log(`git add 成功`)
exec('git commit -am "自动提交成功"', { cwd }, function (error, stdout, stderr) {
if (error) {
errIndexLock(stderr)
console.log(stdout)
console.log(`git commit 失败${stderr}`)
} else {
console.log(`git commit 成功`)
}
exec('git push origin dev', { cwd }, function (error, stdout, stderr) {
if (error) {
console.log(stdout)
console.log(`git push 失败 ${stderr}`)
}
console.log(`git push 成功`)
})
})
})
function errIndexLock(stderr) {
// 删除文件 路径 解决提交报index.lock存在的错误
fs.exists(cwd + '/.git/index.lock', function(exists) {
if(exists && stderr.indexOf('index.lock')) {
fs.unlink(cwd + '/.git/index.lock',err=>{
if(err) return console.log(err)
})
setTimeout(() => {
autoGit()
}, 500)
}
});
}
}
setTimeout(() => {
autoGit();
}, 3000)
这篇关于node 自动复制粘贴并提交git的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!