zoukankan      html  css  js  c++  java
  • git分支合并脚本

    • 为什么要写这个脚本
      • 工作中经常会有合并分支的操作,一开始也不以为然,后来发现如果更新频繁的话,根本就停不下来,昨天上午正好有空,就完成了下面的这个初版
    • 可能存在的问题
      • 一般的应用场景都是:从master分支里面拉取出新feature,bug, release分支,如果分支完成,则需要先合并在test分支里面,test分支测试完成后,合到master分支里面,这时候可能并不会直接上线,还有一个preview环境,其实这里用到的代码和线上一样,都是master里面的,那么问题来了
      • 如果有两个人共同用一个分支开发,他刚更新的代码在测试上没有问题,过一段时间测试完成了,通知运维人员可以上预发布环境了,但是这个时候该功能分支的另外一个正好又提交了一个commit,这时会把最新的版本也合并了,说了半天,才说到重要,也就是每次合并之前都会有个pull --rebase操作
      • 当然也可以再创建一些函数之类的,但是这样就失去了脚本的便利性,后面加一堆操作也不是很好,如果博友有好的建议,欢迎探讨^ _^一般只需要mb dev_xxx_fix_xxx test就搞定了,额,这个名字是我建的一个软链没有其它的意思,only first letter of the merge branch
    #!/bin/sh
    # Author: zhang.wen
    # Date: 2017-03-23 13:03
    # VersionControlTools: git
    #******************************
    # $1 表示功能分支
    # $2 要合并到的分支[ test|master ]
    #******************************
    # 退出状态码:
    # -1表示没有找到此分支
    # -2表示代码执行异常
    
    MERGE_BRANCH=$1
    TARGET_BRANCH=$2
    
    function last_status()
    {
        if [ $? -eq 0 ]
        then
            return 0
        else
            exit -2 
        fi
    }
    
    function pull_latest_branch()
    {
        if git checkout $1 && git pull --rebase 
        then
            last_status
        fi
    }
    
    function check_branch()
    {
        if git branch | grep -q $1
        then
            return 0
        else
            echo "没有找到此分支, 现在从远程分支上拉取至本地"
            pull_latest_branch
            if git branch -rv | grep $1
            then
                git checkout -b $1 origin/$1
            fi
        fi
    }
    
    
    # $1表示要合并到的分支[目标分支],$2表示要合并的分支
    function merge_branch()
    {
        if git checkout $1 && pull_latest_branch $1 && git merge $2
        then
            last_status
        fi
    }
    
    # 接收一个参数,要推送的目标分支
    function push_branch()
    {
        if git push origin $1 && git status
        then
            last_status
        fi
    }
    
    function show_commit_id()
    {
        git log | head -5
    }
    
    function new_line()
    {
        echo 
    }
    
    if [ $# -eq 0 ]
    then
        echo '请输入要合并的分支名, 用法如下:'
        echo "$0 src_branch dst_branch"
        exit 0
    fi
    
    echo -e "\033[0;31;1m当前摘取的分支是:\033[0m $MERGE_BRANCH"
    echo -e "\033[0;31;1m要合并到的分支是:33[0m $TARGET_BRANCH"
    check_branch $MERGE_BRANCH
    new_line
    
    echo -e "拉取\033[0;32;1m $MERGE_BRANCH\033[0m 最新代码"
    pull_latest_branch $MERGE_BRANCH
    new_line
    
    echo -e "切换到\033[0;32;1m $TARGET_BRANCH \033[0m分支,合并\033[0;32;1m $MERGE_BRANCH\033[0m 最新代码"
    merge_branch $TARGET_BRANCH $MERGE_BRANCH
    push_branch $TARGET_BRANCH
    new_line
    
    echo -e "\033[0;31;1m------------------ COMMIT ID ------------------\033[0m"
    show_commit_id
    
  • 相关阅读:
    Redis5.x五种数据类型常见命令
    Redis5.x安装以及常见数据类型
    《Redis5.x入门教程》正式推出
    PPT制作套路指南
    如何更优雅地对接第三方API
    软件开发要质量还是要效率?
    前后端分离对于开发人员的挑战
    Spring中老生常谈的FactoryBean
    消费端如何保证消息队列MQ的有序消费
    《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步
  • 原文地址:https://www.cnblogs.com/ZhangRuoXu/p/6616514.html
Copyright © 2011-2022 走看看