hooks

hooks 中文意思叫: 钩子,是指执行了特定的事件后会被调用的一个脚本。

通过这个钩子, 可以自定义 Git 执行一些事件(如 git push) 后触发的事件。
举个例子: 本地仓库执行 git push 到 master 分支后, 服务器立即把 master 的代码更新的 web 所在的文件夹中,这个动作就可以能过 git 的钩子来实现。

Git 钩子实现自动部署

1. 前提初始化远程仓库

假设我们的服务器为 linux, ip 地址为:192.168.1.1, 用户为:root, 那么首先需要在远程服务器上初始化一个有钩子的 Git 仓库:

# 假设当前目录在:/root/project/
git init --bare your_project.git
或者
mkdir your_project.git
cd your_project.git
git init --bare

初始化后得到: /root/project/your_project.git 这个文件夹里面有这么一些内容:

your_project.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-receive
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
└── refs
    ├── heads
    │   └── master
    └── tags

2. 配置 Git hooks

需要配置的 hooks 就是在 hooks 文件夹内, 新建一个 post-receive 文本文件, 并加入以下内容:

#!/bin/sh
    
unset $(git rev-parse --local-env-vars)
# 部署路径,即 nginx 指定的 web 目录
DeployPath="/data/www/xxxx.com"
    
cd $DeployPath
    
git pull origin master

给 post-receive 添加执行权限:

chmod +x post-receive

3.本地仓库添加 remote 源

本地仓库添加远程仓库源之后,一旦本地仓库执行 git push 到 master 分支就会触发 Git 钩子,执行上面的 shell 脚本。

# 在你本地仓库执行这个命令
git remote add origin root@192.168.1.1:/root/project/your_project.git
# 推送
git push origin master
注意:如果执行以上命令,master 分支的代码都会推送到那个远程服务器的仓库中去了哦,如果需要分开, 请在对应的脚本中分别设置好别的分支名

4. 查看是否成功

进入 /data/www/xxxx.com 查看里面的代码是否和本地代码一致,如果是那么就成功了,如果没有成功,检查一下 post-receive 这个文件的属性和用户的权限(例子中是 root 不会存在这个问题)。

最后

实际上利用这个 git 钩子实现自动部署是非常简单的一个方法,但对个人来说却很方便,是一个个人博客部署的利器。

打赏不准超过你工资的一半!!!