Java教程

node 自动复制粘贴并提交git

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!