我正在将其git
用于一个django
web 项目。我的服务器上有一个裸 git 存储库,我将提交从本地计算机推送到其中。我的本地计算机上还有一个测试服务器,但我希望服务器上有 2 个版本的网站。一个版本作为实时站点(主分支),另一个版本作为测试服务器(开发分支)。所以我需要 2 个工作目录。
我想用post-receive
钩子来
- 更新我的主分支工作目录(用于服务器上的实时站点)
- 更新我的开发分支工作目录(用于服务器上的测试站点)
通常我会
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/path/www.example.org git checkout -f
$ chmod +x hooks/post-receive
但我想 GIT_WORK_TREE 似乎不是正确的选择? 有没有更好的方法?
如何定义分支的工作目录?
答案1
根据digitalocean 上的文章您需要 --work-tree 和 --git-dir 选项的组合,而不是 GIT_WORK_TREE:
git --work-tree=/var/www/html --git-dir=/home/demo/proj checkout -f
对于接收后脚本,其构造最终与您拥有的略有不同:
#!/bin/bash
while read oldrev newrev ref
do
if [[ $ref =~ .*/master$ ]];
then
git --work-tree=/var/www/html --git-dir=/home/demo/proj checkout -f
fi
done
答案2
建议:
#!/bin/sh
echo
echo "*** Moving to Live ***"
echo
cd /path/to/project || exit
unset GIT_DIR
git pull origin master
echo
echo "*** Pulling to Live ***"
echo
/etc/init.d/nginx restart
#exec git-update-server-info
从我的服务器中获取并且对我来说运行良好。
不要忘记修复路径、远程和重启命令。