利用GIT钩子函数实现自动部署或其他操作

本文详细介绍了如何设置Git服务器端和客户端的钩子函数,实现代码自动部署。通过创建裸仓库、配置钩子脚本、修改远程仓库地址,以及利用pre-commit和post-receive等hooks进行代码检查和部署。同时,文章提及了Git相关命令的学习资源,对于理解Git工作流程和自动化部署具有指导意义。
摘要由CSDN通过智能技术生成

1.Server端

第一步.创建初始化一个裸仓库(用来添加钩子函数)

git init --bare test_git_hook_function.git

第二步.通过裸仓库创建一个用来存放代码的仓库

git init test_git_hook_function
#/home/git/test_git_hook_function.git是上面创建的仓库地址
git remote add origin /home/git/test_git_hook_function.git
git clean -df
git pull origin master:master

第三步.创建钩子并赋权限

cd /home/git/test_git_hook_function.git/hooks
touch post-receive
chmod +x post-receive #赋予可执行权限

第四步.编辑钩子内容

#!/bin/sh
app_dir=你的代码目录 (例如: app_dir=/home/git/test_git_hook_function)
cd $app_dir || exit
unset GIT_DIR
# dosomething
...

第五步.测试钩子是否能运行

sh post-receive #或者 ./post-receive

2.client端(新玩法)

此处用的ssh方式,亦可以使用http

玩法说明:本人在gitee上面已有一份代码库,想将代码上传递到服务器(线上打包部署)

gitee上面的仓库代码留作备份,服务器上面的仓库用来作钩子部署

第一步:克隆代码

方法一:
git clone origin git@gitee.com:gitee_user_name/test_git_hook_function.git
方法二:
git init test_git_hook_function #关联远程代码仓库
git pull origin master:master #拉取代码

git remote -v #查看现在对应的远程仓库
    origin  git@gitee.com:gitee_user_name/test_git_hook_function.git (fetch)
    origin  git@gitee.com:gitee_user_name/test_git_hook_function.git (push)

第二步:新增一个推送仓库地址

 git remote set-url --add origin your_user_name@your_server_ip:origin_code_library_address
 例如: git remote set-url --add ssh://git@166.12.35.98[:端口]//home/git/test_git_hook_function.git
git remote -v #查看有没有添加上去(此时有三个)
	origin  git@gitee.comgitee_user_name/test_git_hook_function.git (push)
    origin  git@gitee.com:gitee_user_name/test_git_hook_function.git (fetch)
    origin  ssh://git@166.12.35.98//home/git/test_git_hook_function.git (push)

第三步:推送代码 (前提条件有配置ssh,否则可能会出现推送失败)

#远程仓库的钩子函数也会被触动(有日志的话,会显示)
git push origin master:master

3.课外话

修改远程地址: git remote set-url  origin 你的新地址
	
hooks目录下的文件讲解(加上sample后缀,是为了避免触发)
ClientSide hooks:
  pre-commit:当执行commit动作时先执行此hook,可以用此hook做一些检查,比如代码风格检查,或者先跑测试。
  prepare-commit-msg: 当commit时需要输入message前会触发此hook,可以用此hook来定制自己的default message信息。
  commit-msg:当用户输入commit的message后被触发,可以用此hook校验message的信息,比如是否符合规定,有没有cr等。
  post-commit:当commit完成后被触发,可以用此hook发送notification等。
  pre-rebase: rebase之前会被触发,可以用此hook来拒绝所有的已经push的commits进行rebase操作。
  post-merge:当merge成功后,会触发此hook。
  pre-push:当push时,remote refs被更新,但是在所有的objects传输前被触发。
  pre-auto-gc:当git gc --auto执行前被触发。在垃圾回收之前做一些验证或备份是挺不错的。

ServerSide hooks:
 pre-receive:当收到push动作之前会被执行。
 update:也是收到push动作之前被执行,但是有可能被执行多次,每个branch一次。
 post-receive:当push动作已经完成的时候会被触发,可以用此hook来push notification等,比如发邮件,通知持续构建服务器等。


4.小提示

  • 建议地址尽量写全,例如:git push origin master:master 可由 git push 代替
  • 更多git相关指令学习可参考 Pro Git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值