两周以来,我一直在努力在我们的办公室实施Git。不是缺乏文档,而是丰富的示例,教程和git的各种用途让我对Web开发的推荐设置感到困惑。
我认为我有一个不错的设置,但在进入另一个结构之前,我想咨询更有经验的人。我有以下几点:
这可视化如下:
这有意义吗?我们有各种较小的PHP网站,没有什么比这更复杂的了。我的疑虑是:
现在,以下问题是一些额外的想法,目前不是最重要的,但如果你碰巧知道更多,请分享你的想法:
为简单起见,我希望能够从工作站运行git push
并更新登台服务器和生产服务器。但有时,在上线之前,只更新登台服务器并首先查看那里的内容可能会有用。有一个简单的解决方案吗?
实际上,我们不仅有一个而且有几个不同的生产服务器。但只有一个登台服务器。有没有办法配置不同的生产服务器,以便git自动将它们推送到正确的服务器?
提前感谢您分享您的想法!
答案 0 :(得分:3)
您不希望在生产Web服务器上运行git服务器。而且你真的不希望你的生产服务器上有你的git存储库文件。就个人而言,我喜欢保持简单,不要将我的部署过程与我的SCM流程混淆。
所以我想我不会回答你关于git的问题,但我确实对我的所有web项目使用git,这是我使用的部署设置的类型:
我通常只将git用于SCM,并使用内部服务器来托管存储库(这可能与登台服务器完全相同)。
对于部署,我通常使用rake脚本,因为我喜欢ruby。但是bash脚本也可以。 bash版本将是这样的:
# deploy_staging.sh
rsync -va --delete --exclude-from excludes.txt ./ stagingserver:/htdocs/www.mysite.com/
# deploy_prod.sh
rsync -va --delete --exclude-from excludes.txt ./ realserver:/htdocs/www.mysite.com/
# deploy_all.sh
bash deploy_staging.sh || exit $?
bash deploy_prod.sh
# excludes.txt
.git
deploy_*.sh
excludes.txt
有权发布到服务器的开发人员将其SSH密钥添加到服务器计算机上的相应帐户。
简单易用,易于复制,无需设置挂钩,一切都很好地包含在存储库中,您可以清楚地控制部署的内容,并且可以检查它并从任何位置运行部署正确的网络访问。
答案 1 :(得分:3)
我有类似的设置,我更喜欢使用多个遥控器。因此,我不是使用钩子,而是将“prod”添加为遥控器,并将“uat”添加为遥控器。这样,如果我想推动生产,我可以这样做:
git push prod
git push uat
答案 2 :(得分:3)
- 我应该使用什么样的'钩子'(B)?
您应该使用post-receive or post-update hooks来执行此操作
- 我还应该在生产服务器上运行gitolite吗?我觉得我不应该,因为毕竟只是一个用户将内容上传到服务器(登台服务器上的挂钩),但我不确定。
由于您提到的原因不是强制性的,但由于gitolite设置起来非常简单,因此不会受到伤害
- 我的出发点是:我们在生产服务器上有所有网站,还没有登台服务器和工作站。在初始设置时,将它们“拉”到舞台和工作站的方便方法是什么?
对于他们每个人,您只需执行这些命令
cd /path/of/project
git init
# optionally create and edit your .gitignore file before the next step
git add .
git commit
然后从您的登台服务器运行git clone
命令。
- 为简单起见,我更喜欢能够从工作站运行git push并更新登台服务器和生产服务器。但有时,在上线之前,只更新登台服务器并首先查看那里的内容可能会有用。有一个简单的解决方案吗?
我看不到这个任务的简单解决方案,但是我不喜欢你的自动化生产部署解决方案,有些东西可能会变坏,你会破坏你的生产网站,所以我更喜欢citizen conn多个远程解决方案您可以使用gitolite和权限处理更好地管理事物。每个人都可以推送登台服务器,但受限制的一群人可以推送到生产服务器。
- 实际上,我们不仅有一个而且有几个不同的生产服务器。但只有一个登台服务器。有没有办法配置不同的生产服务器,以便git自动将它们推送到正确的服务器?
您可以将生产服务器地址存储在项目的某个文本文件中,然后在git hook中使用该文件的内容。