zoukankan      html  css  js  c++  java
  • 自制工具:上传修改过的文件到指定服务器

    需求  

    一直希望有一个工具,能够自动监测修改了代码库的哪些文件,然后替换远端代码库的相同文件。有这个需求的原因主要是经常需要在服务器上跑代码,但是因为开发环境和网络环境的关系,线上写代码并不是很方便,所以我经常在本地环境写代码然后scp 文件去远端。 为什么不用git?因为我不想每改几行代码就commit 一次,这样会产生很多垃圾提交,况且要走完add->commit->push->pull->(conflict?)也是个很蛋疼的流程。

      但是scp 还是太麻烦了,因为如果一次改动多个文件,我还要git status 一下看看改了哪几个,然后一个一个敲命令上传。而且如果测试时发现问题,找半天才发现是因为传漏了一个文件。。。所以我决定磨刀不误砍柴功,琢磨一下能不能把流程自动化。

    方案

      首先要解决监测文件修改的问题,于是我开始着手写一个监测文件修改的程序!并没有,git 里的diff 工具就干这事啊。于是在我翻查git --help diff 的时候发现了diff 的一个参数 --name-only。 加上这个参数以后diff 就会打出自上次commit 以来被修改过的文件名,正和我意。接下来我只要写一个脚本,把diff 的输出pipe 进去然后自动执行scp 岂不美哉?

      写一个上传文件到指定服务器的指定目录的脚本,发现我bash 非常拙计,怎么处理字符串,怎么循环都不会。。。好吧,我还是实施曲线救国道路,用我熟悉的nodejs。

    var readline = require('readline')
        , exec = require('child_process').exec
    
    var remote = "username@my.remote.com:~/project/"
    
    var rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout,
            terminal: false
    })
    
    rl.on('line', function(line) {
        exec('scp ' + line + ' ' + remote + line, function(error, stdout, stderr) {
            if (error) {
                console.error(error);
                return;
            }
            console.log(line);
        })
    })

    利用自带的readline 和 child_process核心模块加之小心翼翼地填写了服务器目录,命令样式以后,简单的上传程序完成了。

    此程序从标准输入逐行获取字符串,然后凭凑出我想执行的scp 命令样式然后执行,就是这么简单,这个程序我叫他 updiff.js

    组装

      核心完成了,接下来我想用一个简单的脚本将它们捆绑在一起

    git diff --name-only | node /path/to/util/updiff.js

    简单的pipe 连在一起搞定,保存成文件 updiff.sh

    接下来,我把这个sh 文件放在一个我专门存放小工具的目录下,并把该目录添加到$PATH 里。这样我就可以在中断里随意使用我的自制工具了。

    总结

      现在每当我要在本地写代码线上调代码的时候再也不用担心:1.文件太多打命令太烦了。2.传错传漏。

      然而并不完美,1.首先能够直接scp 上去的原因是因为我早在服务上添加了我的公钥,如果没有公钥则需要密码,那怎么办呢?2.updiff.js 里hardcode 了上传服务器及路径,也就是说此脚本并不通用,因为我99%的时间工作在同一代码库下,所以这只是我的单一需求。

  • 相关阅读:
    创建及修改PDF文件
    Menu控件几个使用方法
    IE不能运行有JS代码的网页处理方法
    SSO实现
    css+div文字底部对齐
    数据控件嵌套的几种方法
    打开及关闭javascript代码
    Excel导出及数据格式化处理
    Menu使用
    在RHEL_5环境,使用centos源
  • 原文地址:https://www.cnblogs.com/agentgamer/p/4839040.html
Copyright © 2011-2022 走看看