设置Git钩子
我们在本地把开发好的项目文件push到服务器时,只是提交到了创建的Git服务器创建的裸仓库中。还需要进入服务器的web运行目录,通过git pull命令拉取到web目录。从本地仓库git push项目到远程仓库,让push到远程仓库中的项目能在web目录运行起来,还需要web目录进行pull拉取下。push一次就需要pull一下,操作起来很繁琐,相当不方便。为了解决这个问题就可以使用Git中的钩子来解决该问题。
咱们已经搭建了Git服务器,并创建了/usr/local/gitdata/目录来存放仓库的。初始化了test.git的仓库文件。地址为:
git clone git@43.143.82.81:/usr/local/gitdata/test.git
进入我们的裸仓库的hooks文件夹,然后新建一个post-receive文件。
cd /usr/local/gitdata/test.git/hooks/
新建post-receive文件
vim post-receive
在post-receive写入以下内容:
#!/bin/bash
git --work-tree=/var/www checkout -f
说明:/var/www需要同步的站点目录
设置post-receive为可执行文件(在目录/usr/local/gitdata/test.git/hooks下设置)
chmod +x post-receive
说明:post-receive的主要目的是当远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)。需要修改你的web站点目录的权限,修改所属用户与用户组为git,否则钩子的权限可能会不足而导致执行失败。设置好钩子后,当你本地再次执行push的时候,会发现web目录的文件也同步的更新了。
例如web目录为/var/www
创建web目录
mkdir /var/www
设置/var/www的权限
chown git:git -R /var/www
本地push到git服务器仓库,然后去查看/var/www中web目录就发现同步了。
git push git@43.143.82.81:/usr/local/gitdata/test.git master