前些天配置了自己服务器的git,通过自己配置的git服务器来管理自己的代码。但由于git服务器一般都没有工作区的,只有以.git结尾的文件目录。
这样一来我每次就得在ftp上把本地的代码文件复制到服务器上的运行环境,以此来保证线上的网站是最新的。
所以我就在想,应该如何在本地push代码到服务器后,服务器上的线上代码也直接更新呢?搜索发现挺多大牛都有教程的,一般都用
hooks。hooks (中文版)
在这里直接贴上我参考的教程https://argcv.com/articles/2078.c
做一下笔记:
在服务器端的 xx.git/hooks文件夹下添加一个post-receive文件
#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
echo G-Punkt-Vibrator "now path is :"$NowPath
DeployPath="/tmp/deploy"
echo "deploy path is :"$DeployPath
cd hockey jerseys $DeployPath
echo "cd deploy path"
git add . -A && git stash # remove local changes
git pull origin master # pull data from master
# the follow line is also ok:
# git add . && git fetch origin && git reset --hard origin/master
echo "deploy done"
cd $NowPath
echo "fine"
# --- Finished
exit 0
代码中的DeployPath="/tmp/deploy"
就是线上部署代码的路径,我的理解是当代码push到服务器时,脚本就会执行,相当于/tmp/deploy这个文件夹重新clone了最新的代码,从而实现了线上代码的自动更新。
总结步骤
1.服务端初始化git:git init --bare test.git
,并修改权限:chown -R git:git test.git
。
2.客户端clone并push一次。
3.服务器端在部署地址clone仓库,即网站线上的地址。如:/www/test,同时修改权限:chown -R git:git /www/test
4.在git仓库下的hooks文件夹添加post-receive文件(注意修改脚本中的文件目录),并修改权限:chmod +x post-receive
。
5.尽情玩耍吧。
遇到的问题:
1.Permission Denied的问题
push后发现错误,提示没有权限的问题,在我这里,我发现线上代码的/tmp/deploy
目录所属用户是root,我这里直接把目录的所属用户改成git,即sudo chown -R git:git /tmp/deploy
,发现就行了。当然教程中也提到了解决权限的问题,但我这里的用户只有root,并没有什么web用户组的,我这里只是我个人服务器,目录权限所属用户这些可以随便我折腾,目前暂时只能先通过更改目录所属用户解决了。
2.push后post-receive没有反应
这说明post-receive的读写权限的问题,执行chmod +x post-receive
即可。
「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」
(๑>ڡ<)☆谢谢老板~
使用微信扫描二维码完成支付