是否可以使用git push部署一个网站?我有一种预感,它与使用git挂钩来执行git重置有关——在服务器端很难,但我该如何完成这一点呢?


当前回答

从本质上讲,你所需要做的就是:

server = $1
branch = $2
git push $server $branch
ssh <username>@$server "cd /path/to/www; git pull"

我在我的应用程序中有这些行,作为一个名为deploy的可执行文件。

所以当我想要部署时,我输入。/deploy myserver mybranch。

其他回答

我的方法是在我的部署服务器上有一个裸露的Git存储库,我在那里推送更改。然后我登录到部署服务器,更改到实际的web服务器文档目录,并执行git拉取。我没有使用任何钩子来自动地做这个,这似乎比它的价值更麻烦。

我们使用capistrano来管理部署。 我们构建capistrano以部署在登台服务器上,然后与我们所有的服务器运行rsync。

cap deploy
cap deploy:start_rsync (when the staging is ok)

使用capistrano,我们可以在出现bug时轻松回滚

cap deploy:rollback
cap deploy:start_rsync

不要在服务器上安装git或复制。git文件夹。要从git克隆版本更新服务器,您可以使用以下命令:

git ls-files -z | rsync --files-from - --copy-links -av0 . user@server.com:/var/www/project

您可能必须删除从项目中删除的文件。

这将复制所有签入文件。Rsync使用的是安装在服务器上的SSH。

你在服务器上安装的软件越少,他就越安全,管理它的配置和记录它就越容易。也不需要在服务器上保留一个完整的git克隆。这只会使正确地保护所有内容变得更加复杂。

在经历了许多错误的开始和死胡同之后,多亏了这篇文章,我终于能够使用“git push remote”部署网站代码。

作者的更新后脚本只有一行长,并且他的解决方案不像其他一些解决方案那样需要.htaccess配置来隐藏Git回购。

如果您在Amazon EC2实例上部署它,则会遇到几个绊脚石;

1)如果使用sudo创建裸目标存储库,必须将repo的所有者更改为ec2-user,否则推送将失败。(尝试“chown ec2-user:ec2-user repo”)

2)如果你没有预先配置你的amazon-private-key的位置,推送会失败。可以在/etc/ssh/ssh_config中作为IdentityFile参数,也可以在~/。ssh/config使用“[主机]- HostName - IdentityFile - User”布局在这里描述…

...但是,如果在~/中配置了Host。ssh/config和不同于HostName的Git推送将失败。(这可能是Git的bug)

听起来你应该在你的服务器上有两个副本。一个裸拷贝,你可以推/拉,当你完成时,你会推你的改变,然后你会把这个克隆到你的web目录,并设置一个cronjob来每天从你的web目录更新git pull。