如何设置Git(+ gitolite?)以及预览/暂存网站和生产/实时网站?

4
这是一个关于最佳解决方案的普遍性问题,但我已经阅读了很多,仍然没有找到所有问题的答案。我在一个小型网页代理公司工作,有3名开发人员(2名现场和1名远程),我们仍在使用FTP(style-1.css、style-2.css)来处理托管在线预览URL的网站,然后下载完成的工作并重新上传到其实时URL。我知道这样做相当老派,完全不符合今天的标准,因此我开始研究Git。我想利用它来管理部署。
我想要做到以下事情:
1. 开发者本地工作 2. 开发者将代码推送到服务器上的预览/暂存环境(公共访问) 3. 客户确认 4. 开发者将预览推送到实时环境/开发人员告诉实时环境从预览中获取
我想知道的是:
1. 我可以在服务器上设置远程库以容纳我们正在处理的所有文件,这样我们就可以将一个URL指向这些文件,作为预览/暂存站点使用吗?(为什么我读到应该使用裸库?) 2. 在这种情况下设置“实时”网站的最佳方法是什么?有人能否解释一下如何设置一个命令(钩子?),使得稳定后,从预览站点拉到实时站点? 我已经试图研究工作流程,但我没有找到如何在公开(客户)访问的工作流程中使用它的方法。
谢谢!

这是一篇关于这个主题的文章。你可能不想使用他所有的代码,但可以了解整体思路,然后根据自己的情况实现自己的解决方案。 - Simon Boudrias
谢谢你,Simon。这篇文章非常棒,肯定会对我有所帮助。 - Paul Tibbetts
3个回答

2
请注意:
您不必使用gitolite:该文章Simon 在评论中提到的 post-receive hook 可以应用于任何您要推送到的裸仓库。只有在您想要保护这些推送并进行授权时,才需要使用gitolite(因为Gitolite是一个授权层)。
您可以拥有一个更简单的hook,根据您正在推送的分支执行不同的操作。例如,请参见“编写git post-receive hook以处理特定分支”。
您可以从裸仓库中完成的提交中拉取任何仓库,请参见“设置裸仓库的post-receive hook”。

谢谢你提供的链接,Von。我建议的工作流程是否是使用Git的合理方式?即使让开发分支公开可见?或者我理解错了?我知道Git是用于版本控制而不是部署,但我希望它能为我们两者兼顾。 - Paul Tibbetts
在部署方面,我会避免在生产服务器上使用 Git(正如 http://stackoverflow.com/a/8122183/6309 中所提到的),但是,将代码推送到裸仓库并从目标仓库拉取是实现部署的好方法。如果可见性(即“他人可以修改”)成为问题,则使用 gitolite 更好。 - VonC
谢谢VonC,你引导我远离了对服务器的破坏。我选择了Beanstalk来管理部署。希望有一天我能解决它。 - Paul Tibbetts

1

回答自己的问题

我想提供一个更新,对于那些和我有同样问题的人。

最终,为了使用git并管理部署,我选择了BeanStalk,然而我也考虑过使用Capistrano,甚至可能会同时使用它们

感谢Simon的文章,Makis解释我将使用hooks的原因,以及VonC引导我远离破坏我的服务器和让事情变得更加困难的错误决定。


有趣的反馈,比我的答案更精确。+1 - VonC

0

如果您想花费一些钱并且想要无麻烦,我会在GitHub中设置一个存储库。这将节省很多麻烦。似乎 GitHub 的成本从每月 7 美元起,适用于私有存储库。像这样做的好处有很多,但在您的情况下最大的好处是无需任何设置即可从任何地方轻松获取存储库。

您所要求的脚本只需要a)将网站设置为指向“正在进行维护”的页面,b)从 GitHub 存储库拉取更改,并且c)可能重新启动服务(MySQL 等)。我不会完全自动化这个过程,但也不会太难。

我会使用分支来管理预览和交付级别。因此,脚本将从发布分支中拉取最新内容。

同样,开发人员将使用适合您的任何分支策略将代码推送到 GitHub 中。


谢谢你的建议,Makis。我喜欢你提出的想法,但最终我想在没有GitHub的情况下完成这个项目,因为我们有自己的服务器,而且我也不介意学习如何进行自主托管。我会开始在个人工作中使用GitHub。谢谢。 - Paul Tibbetts
在这种情况下,请查看http://www.gitorious.org上的Gitorious。我已经安装了几个实例。它不像GitHub那样复杂,但仍然非常可用。 - Makis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接