shell脚本实现git快速提交代码与快速回滚

shell脚本实现git快速提交代码与快速回滚

创建一个commit库:

[[email protected] cml]# echo "check github" > index.html

[[email protected] cml]# cat index.html

check github

[[email protected] cml]# git add index.html

[[email protected] cml]# git commit -m "check github"

[master b357825] check github

 1 files changed, 1 insertions(+), 1 deletions(-)

[[email protected] cml]# git push

Counting objects: 5, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 263 bytes, done.

Total 3 (delta 1), reused 0 (delta 0)

remote: Resolving deltas: 100% (1/1), completed with 1 local object.

To [email protected]:legehappy/cml.git

   1a81b88..b357825  master -> master

添加几个标签(这个标签是完好无事的):

[[email protected] cml]# git tag

v1.0

v2.0

v3.0

编写一个快速提交代码与快速回滚的shell脚本:

#!/bin/bash
#author=cml
#[email protected]
#phone=*********
##################################
mail_user="[email protected]"
git_dir=/github
REPOLY="cml"

send_mail_push(){
    echo "push version is $1" | mail -s "deploy push" $mail_user
}

send_mail_roll(){
    echo "roll version is $1" | mail -s "deploy roll" $mail_user
}

git_pull(){
    if [ ! -d $git_dir ];then
        mkdir $git_dir
    fi
        cd $git_dir
    if [ ! -d $REPOLY ];then
        git clone [email protected]:legehappy/cml.git >> /dev/null
    fi
        cd $REPOLY
        git pull
}

git_tag_list(){
    cd $git_dir/$REPOLY
    git_pull
    count=`git tag | wc -l`
    if [ $count -eq 0 ];then
        echo "please take your tag"
    else
        git tag
    fi
}

git_add_deploy(){
    cd $git_dir/$REPOLY
    git_pull
    git_num=$(($(git tag | wc -l)+1))
    git_deloy="v$git_num.0"
    git tag -a $git_deloy -m "$git_deloy"
    git push
    git push --tag
}

delopy(){
    rsync -vzrtopg --progress $git_dir/$REPOLY/* 192.168.5.128:/data/
    cd $git_dir/$REPOLY
    tag_status=$(git tag | tail -n 1)
    echo "$tag_status"
    send_mail_push $tag_status
    #ssh 192.168.5.128 ln -s /data/ /web
}

check_web(){
    check=`curl -I -m 10 -o /dev/null -s -w %{http_code} 192.168.5.128/index.html`
    if [ $check -eq 200 -o $check -eq 301 -o $check -eq 302 -o $check -eq 304];then
        echo "the web is up"
    else
        echo "please check index.html"
    fi
}

git_set(){
    cd $git_dir/$REPOLY
    select x in "git_reset_HEAD" "git_reset_tag";do
        case $x in
            git_reset_HEAD)
                cd /github/cml
                git reset --hard HEAD^
                git push -f
                git push --tags
                rsync -vzrtopg --progress $git_dir/$REPOLY/* 192.168.5.128:/data/
                cd $git_dir/$REPOLY
                tag_status=$i
                echo "$i"
                send_mail_roll $i
            ;;
            git_reset_tag)
                cd $git_dir/$REPOLY
                a=`git tag`
                worry_tag=$(git tag | tail -n 1)
                echo "please select which:"
                select i in $a; do
                    if [ $i == "$worry_tag" ];then
                        echo "try again"
                    else
                        echo "you select $i"
                        git reset --hard $i
                        break
                    fi
                done
                git push -f
                git push --tags
                rsync -vzrtopg --progress $git_dir/$REPOLY/* 192.168.5.128:/data/
                cd $git_dir/$REPOLY
                tag_status=$i
                echo "$i"
                send_mail_roll $i
            ;;
        esac
        break
    done
}

main(){
    git_add_deploy
    delopy
    check_web
}

reset_one(){
    git_reset_HEAD
    check_web
}

reset_second(){
    git_reset_tag
    check_web
}
$1

测试:发布一个代码使用脚本快速上传和增加标签:

[[email protected] github]# cd cml/

[[email protected] cml]# ls

cml.txt  index.html  README.md  test.txt

[[email protected] cml]# echo "worry index.html" > index.html

[[email protected] cml]# cat index.html

worry index.html

[[email protected] cml]# git add index.html

[[email protected] cml]# git commit -m "worry index.html"

[master 224e010] worry index.html

 1 files changed, 1 insertions(+), 1 deletions(-)

[[email protected] cml]# git push

Counting objects: 5, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 272 bytes, done.

Total 3 (delta 1), reused 0 (delta 0)

remote: Resolving deltas: 100% (1/1), completed with 1 local object.

To [email protected]:legehappy/cml.git

   b357825..224e010  master -> master

[[email protected] github]# bash deploy.sh main

Already up-to-date.

Everything up-to-date

Counting objects: 1, done.

Writing objects: 100% (1/1), 151 bytes, done.

Total 1 (delta 0), reused 0 (delta 0)

To [email protected]:legehappy/cml.git

 * [new tag]         v4.0 -> v4.0

sending incremental file list

README.md

           6 100%    0.00kB/s    0:00:00 (xfer#1, to-check=3/4)

cml.txt

          10 100%    9.77kB/s    0:00:00 (xfer#2, to-check=2/4)

index.html

          17 100%   16.60kB/s    0:00:00 (xfer#3, to-check=1/4)

test.txt

          11 100%   10.74kB/s    0:00:00 (xfer#4, to-check=0/4)

sent 286 bytes  received 88 bytes  748.00 bytes/sec

total size is 44  speedup is 0.12

v4.0

the web is up

在开发者的服务器上已经同步新的代码:

[[email protected] data]# ls

cml.txt index.html README.md test.txt

[[email protected] data]# cat index.html

worry index.html

而且邮箱收到上传的最新标签:

Reset一:此时发现新的代码存在bug,先回退到上一个版本:

[[email protected] github]# bash deploy.sh reset_one

HEAD is now at b357825 check github

Total 0 (delta 0), reused 0 (delta 0)

To [email protected]:legehappy/cml.git

 + 224e010...b357825 master -> master (forced update)

sending incremental file list

index.html

          13 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/4)

sent 135 bytes  received 37 bytes  344.00 bytes/sec

total size is 40  speedup is 0.23

v4.0

the web is up

[[email protected] github]# cat cml/index.html

check github

这样就实现了git快速上传代码:出现故障时回滚代码的效果:

Reset二:有时候可能会出现最近上传的多个代码都出现bug想要回滚到一个没问题的代码的时候,我们选择第二层回滚:

[[email protected] github]# bash deploy.sh reset_second

please select which:

1) v1.0

2) v2.0

3) v3.0

4) v4.0

#? 3

you select v3.0

Everything up-to-date

sending incremental file list

sent 82 bytes  received 12 bytes  188.00 bytes/sec

total size is 40  speedup is 0.43

v3.0

the web is up

[[email protected] github]# cat cml/index.html

check github

而且邮件收到你回滚到的版本的标签:

原文地址:http://blog.51cto.com/legehappy/2301031

时间: 2024-10-12 01:07:35

shell脚本实现git快速提交代码与快速回滚的相关文章

轻松使用git命令提交代码

Github在Windows和Mac上都提供了很好的图形化的客户端,UI风格节约,功能轻松易用.但是我们仍然有必要熟悉git命令来维护代码,比如linux. 借用@sunshyran总结的git提交代码的五个步骤: 查看代码的修改状态 查看代码的修改内容 暂存需要提交的代码 提交已暂存的文件 同步到服务器 Step1.查看代码的修改状态 打开git shell(环境:以windows为例,安装好Github的客户端并配置好账户信息), 默认是在git的工作空间路径,ls命令可以查看workspa

GIT入门笔记(20)- git 开发提交代码过程梳理

git开发提交流程新项目开发,可以直接往master上提交老项目维护,可以在分支上修改提交,多次add和commit之后,也可以用pull合并主干和本地master,解决冲突后再push 1.检出代码 git clone http://gitserver/kubernetes/api-gateway-controller.git git clone http://gitserver/kubernetes/api-gateway-engine.git 引入为eclipse工程,修改代码 2.提交代

git服务器提交代码的总结

将更新的代码提交到git服务器上所需要的步骤: 1,git pull 更新代码到最新 2,git add 文件名 添加要提交的文件 3,git commit  -m  "关于修改的内容的概括" 或者:git commit 在 vi 里面编辑修改的内容. 4,git log -2 查看修改的内容. 5,git  checkout  -b  mybranch 将代码提交到本地分支. 6,git push os mybranch:refs/for/refs/heads/Android 将代码

git服务器提交代码的总结(2)

在git服务器上提交代码的时候,我们可能会在写代码修改内容的时候出现一些需要修改的信息,这时候要是撤销原来的操作重新提交很麻烦, 所以今天我就把我遇到的情况的解决方法写出来大家一起分享.当然也是让自己在以后的时候能够在忘记的时候可以看看. 1,git commit --mend 这条命令主要是用在你提交代码以后,还需要修改一些代码注释内容的时侯. 2,git branch -a 查看所有的分支名称. 3,git status 查看所有的当前目录及其子目录下修改过的文件. 4,git diff 查

git纯净提交代码(只提交自己改过的文件)

添加远程仓库,这个远程仓库是要进行发起合并请求的仓库,简单来说就是项目的主要代码库,不是自己派生的代码库 git remote add main http://xxx 从远端仓库下载新分支与数据git fetch main 创建新分支,以主仓库的master作为参照git checkout -b release main/master 创建自己派生库的新分支release,作为纯净分支git push origin release 非提交性合并git merge --squash origin 

git bash提交代码过程 以及 git pull报错 your local changes to the following files would be overwritten by merge:

git bash 平常提交代码流程: 1. 在文件根目录下鼠标右键点击空白处,选择git Base here 2. git status 查看哪些文件被修改,文件状态为 modified, 也就是被修改了,“Changes not stagged for commit”表示文件被修改但是提交前还没有被存储 3. git add 将修改添加到暂存区(git commit之前必须要执行这一步) git add . : 是将所有被修改的文件和新增加的文件,但不包括被删除的文件 添加到缓存区 git a

Jenkins实现html代码上线与回滚

一.案例环境二.部署Gitlab1)部署Gitlab2) 配置免密登录3)测试免密登录三.部署Jenkins四.Jenkins集成Gitlab五.部署Nginx六.Jenkins实现代码自动上线七.Jenkins实现代码自动部署与回退及重复构建 一.案例环境 系统 IP地址 主机名 所运行的服务 Centos 7 192.168.1.6 gitlab gitlab Centos 7 192.168.1.7 Jenkins jenkins Centos 7 192.168.1.8 Nginx ng

快速提交代码到git.oschina.net之设置.gitignore

大家都知道 新建一个 Git 项目的时候 会有一个配置文件叫 .gitignore ,如图所示 这个文件是干嘛的呢? 这就是今天的主角,它的作用是提交你的项目.工程文件时,设置要忽略的一部分文件或文件夹的规则,从而 避免 提交一些不必要的文件比如 .classpath,settings目录等的东西到代码仓库,给其他开发人员 同步代码的时候 由于这些 .classpath,settings 等和之前设置不一样 带来的麻烦. 这里以 http://git.oschina.net/Gelopa/Mic

Windows下使用Git Bash提交代码到GitHub

以前上传代码到Github主要是通过客户端Github Desktop或者网页,换电脑后感觉安装客户端太麻烦,了解命令行的方式就很有必要了. 这里的实验是把一些代码更改提交到Json.git仓库里. "ls" 为Linux命令,用于查看当前目录下的文件及文件夹. "git init" 命令用于对当前目录进行初始化,使当前的project-name目录交由Git进行管理. "git add" 命令可以对指定文件添加跟踪.如果后面跟空格加点号&quo