Git:推送到远程存储库时更新网站?

时间:2011-01-06 11:39:32

标签: git workflow

每当我推送到远程存储库时,我都会想要更新一个网站。我来自一个svn背景,仍在试图找出git。

现在,我已经完成了以下工作:

  • 在包含该网站的本地计算机上设置Git存储库。
  • 将(裸)存储库克隆到我的Web服务器。

现在我有点卡住了。我可以将更改推送到服务器上的裸存储库,但我不知道如何在我的www目录中检出存储库的工作副本,并在我将本地存储库推送到服务器时自动更新它。我可能需要一个钩子脚本吗?

相关问题,Deploy PHP using Git,部分回答了我的问题,但我想知道脚本实际上在做什么。

2 个答案:

答案 0 :(得分:6)

这对我有用,它可能适合你: A web-focused Git workflow

答案 1 :(得分:4)

我在Caius Theory Website

上找到了一个非常好(优雅)的解决方案

它基本上以裸存储库开始,并将工作树更改为web-server文件夹。之后,它使用post-receive挂钩在每次接收推送后更新工作树。优雅且易于遵循的程序!

除了该文章中的设置之外,我还将网站位置的软链接“.git”目录添加回git存储库位置:

ln -s /home/caius/git/somesite.git/ /home/caius/vhosts/somesite.com/htdocs/.git

这样我就可以通过登录并在网站文件夹中使用“git checkout”来检查网络服务器上的另一个分支!

我还对来自here的Python脚本“ygit-push-all.py”稍作修改,以更新我的多台机器,这些机器使用不同的配置文件运行相同的框架代码。您甚至可以为每台服务器设置一个分支(如演示/开发)。

此外,我将以下别名添加到我的全局git配置文件中:

[alias]
    push-all = !ygit-push-all.py
    check-all = !sh -c 'git branch -r -v | grep master | awk \"{ print \\$1, \\$2 }\"'

git push-all 将更新所有我的远程位置

git check-all 会向我显示每个远程分支的转速