git管理

前提:
公司对gitlab的管理定义的规范,所有人都需要遵守此规范。规范大概如下:
1.确保每个应用代码库有develop(开发)、prepub(预发)、及master(产线)分支
2.对于产线bug,从master拉取代码到bugfix分支修改--->合并至master ,将bugfix-->develop  bugfix-->prepub
3.并行功能的开发。基于develop分别拉取子分支,命名feature-xx 
4.master、prepub做严格管控,只有leader,运维人员有权限push,merge
5.对每次产线发布前对master分支打tag,用于代码的回滚

运维的烦恼:
每次应用发布之前,会有很多重复而又会误操作的代码合并问题,一直伴随着。。。。

目的:
把所有代码的合并,都交给script来处理,一次编写永久使用,及不会出现误操作也可减轻运维工作量
此处贴出自己的脚本,希望各位给出自己的看法,是否有其他可以改进的地方

#!/bin/bash
work_dir=/Users/xxx/git-manage
project=$1
appname=$2
src_branch=$3
dest_branch=$4
git_url=git@gxxx.com
group=$1
git_repo=${git_url}:${group}/${appname}.git
set -x 
usage() {
    echo "USAGE:$0 project appname src-branch dest-branch"
    exit 200

}
if [ $# -ne 4 ];then
    usage
fi

project_zone() {
  mun=$(ls ${work_dir}|awk /^${project}$/'{print $0}')
        if [[ $mun = $project ]];then
      cd ${work_dir}/$project
    else
           mkdir -p ${work_dir}/$project     
     cd ${work_dir}/$project  
    fi
                            
   }
    #judge appname exist
 app_name() {
   var=`ls ${work_dir}/$project|grep "\b$appname\b"`
                                 
   if [[ ! -z $var ]];then
          cd $appname
   else
     git clone ${git_repo}
      cd $appname
    fi  
                                                         
  }
#src-branch judge
srcBranch() {
    #check remote git branch 
    local remote_branch=$(git branch -r |grep "\b${src_branch}\b"|awk -F /  /^${src_branch}$/'{print $NF}')
    local local_branch=$(git branch|grep "\b${src_branch}\b"|awk '{print $NF}')
     if [[ $remote_branch = $src_branch ]];then
         if [[ $local_branch = $src_branch ]];then
             git checkout $src_branch
             git pull origin $src_branch
         else
             git checkout -b $src_branch origin/${src_branch}
             git pull origin $src_branch
        fi
     else
         echo "remote git server not exist the ${src_branch}"
         exit 203

     fi

}

destBranch() {
    local remote_branch=$(git branch -r |grep "\b${dest_branch}\b"|grep -v HEAD|awk -F / /^${dest_branch}$/'{print $NF}')
    local local_branch=$(git branch |grep "\b${dest_branch}\b"|awk '{print $NF}')
     if [[ $remote_branch = $dest_branch ]];then
         if [[ $local_branch == $dest_branch ]];then
             git checkout $dest_branch
             git pull origin $dest_branch
         else
             git checkout -b $dest_branch origin/${dest_branch}
             git pull origin $dest_branch
        fi
     else
         echo "remote git server not exist the ${dest_branch}"
         exit 204

     fi

}

merge_code() {
    local local_branch=$(git branch|grep "\*"|awk '{print $NF}')
    local date=`date +%F`
    local merge_code=`git status|grep -i "conflict"|wc -l`
    
      
    if [ $dest_branch = "master" ];then 
         git tag v"$date"_before
         git push --tags
         git merge $src_branch
           if [ $merge_code -ge 1 ];then
                echo "$project $appname merge conflict" > $work_dir/confilct.txt
                
        else
                git push origin $dest_branch
                echo "code merge successed"
                cd $work_dir
            fi
       else

         git merge $src_branch
           if [ $merge_code -ge 1 ];then
                echo "$project $appname merge conflict" > $work_dir/confilct.txt
            cd $work_dir
                exit 234
       else
                   git push origin $dest_branch
                echo "code merge successed"
                cd $work_dir
             fi
      
        fi
    
     
}
project_zone
app_name
srcBranch
destBranch
merge_code
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值