用git部署php站点


在小站点上,直接用git来部署php代码相当方便,你的远程站点以及本地版本库都有一个版本控制,追踪问题或者回滚是很轻松的事情。下面介绍用git部署时的设置步骤

在远程服务器的设置

假定你需要部署的代码在/var/www/yoursite

cd /var/www/yoursite
git init .
git config receive.denyCurrentBranch ignore
git config --bool receive.denyNonFastForwards false
cd .git/hooks
wget https://gist.githubusercontent.com/volca/9482044/raw/344a590af350b997db3819fa21426dfe8bc140f4/post-update
chmod +x post-update

在本地git库中新增配置


[remote "prod"]
        url = your-ssh-username@your-host:/var/www/yoursite/

这样就算设置完成了。

如果你想把本地的代码推送到远程服务器,下面简单的步骤就可以做到

git pull
git push prod

注意事项

如果远程服务器上git的配置目录.git暴露在外部可访问的位置,请在web服务器上设置这个目录不可见。


11 responses to “用git部署php站点”

  1. ooso你好,我对你的博客内容非常感兴趣,我目前也在学习php和linux,在一家小型公司做php,虽然已经能用php解决目前工作中的绝大多数问题,不过我始终觉得自己会的还太于肤浅,希望能与你交个朋友。我的gtalk:cnstou@gmail.com

  2. 这个方法不错,用了那么久git,我怎么就没想到使用hook来自动pull呢,日了。。。

    我之前的做法是先 git push server, 然后在ssh到server上去手动 git pull,累。。。

  3. 用了博主的这个方法,确实很方便。不过在使用过程中遇到一个问题,我是在windows2003上用msysgit和cygwin部署的,当服务器上的版本库里有未提交的改动时,本地push的时候会提示:
    remote: error: unable to create directory for /cygdrive/f/wwwroot/mydir/.git/HEAD
    remote: fatal: Cannot lock the ref ‘HEAD’.
    remote: trapped 2292
    这样的错误,
    但是能提交成功,服务器上未提交的改动会被覆盖,而不是进缓冲区。
    后来研究了一下,发现是因为服务器上的git账户对版本库所在账户的外层目录没有访问权限造成的,如在我上面这个例子里,给wwwroot目录添加上git用户并赋予该用户修改权限后,再从本地push就不会报错了,未提交的修改会被stash,这样就不会丢失修改了。另外如果版本库是直接建在分区下的话,不存在这个问题。
    希望对遇到类似问题的朋友有所帮助。

  4. git push完了如果目录是空的,就执行 git reset –hard

Leave a Reply

Your email address will not be published. Required fields are marked *