🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 了解什么是GitHooks 简单来说就是Git 能在你执行`git push`、`git commit`等命令后的特定时间执行指定的脚本。 例如:使用`git push`向服务器同步本地代码完毕后,服务端的git就会自动帮我们执行`post-receive`脚本,我们就可以在`post-receive`脚本里面编写我们的自动部署代码啦!(这需要一点点shell脚本的编写知识哦~)。 有两组这样的钩子:分为客户端的和服务器端的。 ## 编写Hook 首先打开我们原先在服务器上创建的`裸仓库`,在裸仓库里面有一个`hooks`文件夹,在里面有很多git给我写的hook例子,例如笔者的hooks文件夹就有这些hook。 ``` ├── applypatch-msg.sample ├── commit-msg.sample ├── post-receive # 这个自己写的,用于自动部署的脚本,会在同步代码完成时由git来运行它 ├── post-update.sample ├── pre-applypatch.sample ├── pre-commit.sample ├── prepare-commit-msg.sample ├── pre-push.sample ├── pre-rebase.sample └── update.sample ``` 想要了解更多hook可以查看[git官方文档](https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90) post-receive的具体内容如下 ``` # 该环境变量会影响部分git命令的执行 unset GIT_DIR # 获取生产环境所有文件的写权限,防止deploy.sh中更改了权限,导致无法更新情况 chmod u+w -R /www/wwwroot/TBlog # 忽略文件的权限,否则后面更改deploy.sh的权限,会导致无法git pull,因为版本内容不一致。 git config core.filemode false echo '开始更新生产环境的代码...' cd /www/wwwroot/TBlog git pull origin master # 执行部署脚本 if [ -d ] then echo '执行项目的部署脚本' chmod u+x /www/wwwroot/TBlog/deploy.sh # 给予执行权限 /www/wwwroot/TBlog/deploy.sh fi echo '生产仓库更新完毕' ```