使用git部署网站

时间:2014-01-10 19:15:17

标签: git web-deployment

我知道有很多关于这个话题的问题,但我从来没有按照我想要的方式工作。

我正在尝试为小型网站设置简单的部署工作流程。我正在使用本教程作为参考:https://halfthetruth.de/2011/09/13/using-git-to-deploy-a-website/

我设置了教程中解释的一切,但我遇到了这个问题:

这是我尝试从本地存储库中推送的时候:

example.com|master ⇒ git push production +master:refs/heads/master
Counting objects: 12, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (12/12), 967 bytes | 0 bytes/s, done.
Total 12 (delta 3), reused 0 (delta 0)
remote: ********************
remote: Post receive hook: Updating website
remote: ********************
remote: fatal: No remote repository specified.  Please, specify either a URL or a
remote: remote name from which new revisions should be fetched.
remote: fatal: Unable to create '/home/user/git/example.com.git/index.lock': Permission denied
To ssh://user@example.com/~/git/example.com.git
 * [new branch]      master -> master

我的post-receive挂钩看起来像这样:

#!/bin/sh
echo "********************"
echo "Post receive hook: Updating website"
echo "********************"

export GIT_WORK_TREE=/usr/share/nginx/www/example.com
cd $GIT_WORK_TREE
sudo -u www-data git --work-tree=/usr/share/nginx/www/example.com --git-dir=$HOME/git/example.com.git pull
sudo -u www-data git --work-tree=/usr/share/nginx/www/example.com --git-dir=$HOME/git/example.com.git checkout master -f

我在远程服务器上的裸存储库位于/home/user/git/example.com.git,而应该从中提供网站的nginx的文档根位于/usr/share/nginx/www/example.com

在非git目录中运行git pull命令看起来有些问题,但我不知道如何解决这个问题。谁能指出我正确的方向?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您不在git仓库中,您仍然可以指向git命令本身的git仓库:

git --work-tree=path/to/worktree --git-dir=path/to/.git pull

答案 1 :(得分:1)

我通过将我的用户添加到www-data群组来“修复”此问题。

sudo chown www-data /usr/share/nginx/www/example.com
sudo usermod -a -G www-data user
sudo chgrp -R www-data /usr/share/nginx/www/example.com
sudo chmod -R g+w /usr/share/nginx/www/example.com

完成此操作后,我删除了原始问题中链接的教程中提到的自定义sudoers文件,并删除了sudo -u www-data文件中的post-receive部分。

如果对这个问题有更好的解决方案,我很乐意接受你的回答。