git hooks 实践

git hooks 实践

一个简单的需求, 每次push之前 都将version 文件的版本号加一, 然后一起push 想到了 hooks, 最后实践过程中发现在 pre-push中 不能 git commit 也就是说 pre-push 只能 push git push 之前的所有commit 就算你在 pre-push 中 进行了 commit 操作 但是最终 pre-push中的commit 并不会被提交

pre-push 尝试

# pre-push
#!/bin/bash
increment_versiovn ()
{
  declare -a part=( ${1//\./ } )
  declare    new
  declare -i carry=1

  for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 ));
  do
       len=${#part[CNTR]}
       new=$((part[CNTR]+carry))
       [ ${#new} -gt $len ] && carry=1 || carry=0
       [ $CNTR -gt 0 ] && part[CNTR]=${new: -len} || part[CNTR]=${new}
  done
  new="${part[*]}"
  echo -e "${new// /.}"
}


master_branch='master'
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
if [ $current_branch = $master_branch ];then
        version=$(cat ./version)
        cat /dev/null  > ./version
        echo $(increment_versiovn $version) > ./version
        git add ./version
        git commit ./version -m "update version: $(increment_versiovn $version)"
        exit 0
else
       exit 0
fi

上面pre-push hooks 会在 master 分支 push 的时候 将版本号加一, 并且生成一个commit, 但是本次commit并不会被push

自定义脚本

既然不能通过 pre-push 自动操作,那就只能写一个脚本手动操作一下了

#!/bin/bash
# build_version.sh

increment_versiovn ()
{
  declare -a part=( ${1//\./ } )
  declare    new
  declare -i carry=1

  for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 ));
  do
       len=${#part[CNTR]}
       new=$((part[CNTR]+carry))
       [ ${#new} -gt $len ] && carry=1 || carry=0
       [ $CNTR -gt 0 ] && part[CNTR]=${new: -len} || part[CNTR]=${new}
  done
  new="${part[*]}"
  echo "${new// /.}"
}
version=$(cat ./version)
cat /dev/null > ./version
echo $(increment_versiovn $version) > ./version
# 将 "\n" -> "\r\n" 为了去除 windows 下 git 的行尾修改警告
sed -i "s/$/\r/g" ./version
git add ./version
git commit ./version -m "update version: $(increment_versiovn $version)"
git push
echo "build version and push successfully!"

在每次push前 执行一下./build_version.sh 就可以实现自动增加版本号并且push到远程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值