我在我的服务器上创建了一个裸 git repo,并从这个博客设置了以下 post-receive 钩子:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
git --work-tree=/path/to/my/project/live/ checkout -f $branch
echo 'Changes pushed live.'
fi
if [ "develop" == "$branch" ]; then
git --work-tree=/path/to/my/project/dev/ checkout -f $branch
echo 'Changes pushed to dev.'
fi
done
这样每当我在本地推送到我的服务器时,更改都会自动发布到每个分支的文件夹中,而无需手动拉取。
我设置了正确的权限以同时使用 dev 文件夹:
drwxrwsr-x 2 git git 4096 Sep 29 12:10 live/
drwxrwsr-x 2 git git 4096 Sep 29 12:09 dev/
并且从开发分支推送按预期工作。当我签出主分支并进行合并时会出现问题。当我推送主文件时,新文件被复制到我服务器上的活动文件夹中,但我在本地删除的文件没有被删除。
如何让 post-receive 正确更新 live 文件夹?谢谢!