2011-08-15 144 views
9

两周以来,我一直试图在我们的办公室实施Git。而不是缺乏文档,它是大量的例子,教程和git的各种用法,使我对Web开发的推荐设置感到困惑。Git:网页开发的推荐设置

我想我有一个体面的设置,但在深入另一个结构之前,我想检查一下更有经验的人。我已经记住以下几点:

  • 工作站推到本地临时服务器(A)
  • 局部分期服务器gitolite工作正常分裂作用
  • 钩自动将任何改变临时服务器上在生产服务器(B)

这被形象下面: enter image description here

这是否有道理?我们有各种小型PHP网站,没有什么非常复杂的。我有的疑问是:

  • 我应该使用什么样的“钩子”(B)?
  • 我是否也应该在生产服务器上运行gitolite?我觉得我不应该这样做,因为毕竟它只是一个用户将事情上传到服务器(登台服务器上的钩子),但我不确定。
  • 我的出发点是:我们拥有生产服务器上的所有网站,但尚未位于登台服务器和工作站上。在初始设置时,将它们“拉”到舞台和工作站的便利方式是什么?

现在,以下几个问题是一些额外想法不是最大的,此刻很重要,但如果你碰巧知道更多分享您的想法:

  • 为了简单起见,我宁愿能从工作站运行git push,并更新登台服务器和生产服务器。但有时候,只有更新登台服务器并在上线之前先检查那些东西才有用。有一个简单的解决方案吗?

  • 实际上,我们不仅有一个但有几个不同的生产服务器。但只有一台登台服务器。有没有办法配置不同的生产服务器,以便git自动将它们推送到正确的服务器?

在此先感谢您分享您的想法!

+0

推送到生产服务器的标准是什么?挂钩是否检查特定的提交消息? –

回答

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推,并且都将登台服务器和生产服务器更新。但有时候,只有更新登台服务器并在上线之前先检查那些东西才有用。有一个简单的解决方案吗?

我看不到这个任务简单的解决办法,但我不喜欢与自动化生产部署解决方案时,事情就可以走坏,你会打破你的生产现场,所以我更喜欢citizen conn多远程解决方案。您可以使用gitolite和权限处理来更好地管理事情。每个人都可以推送登台服务器,但有限的一群人可以推送到生产服务器。

  • 实际上,我们不仅有一个但有几个不同的生产服务器。但只有一台登台服务器。有没有办法配置不同的生产服务器,以便git自动将它们推送到正确的服务器?

你可以存储你的生产服务器地址在项目的一些文本文件,然后使用该文件的内容在你的混帐挂钩。

+0

谢谢,听起来都很不错!我会试试这个! – user852091

3

您不想在生产Web服务器上运行git服务器。你真的不希望你的生产服务器上的git仓库文件。我个人喜欢将事情简单化,不要将我的部署过程与我的SCM过程混淆在一起。

所以我想我不会回答你关于git的问题,但我不使用git我所有的Web项目,这里是我使用部署的安装类型:

我通常使用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

只要你的根目录没有上传到网络,你就可以拥有.git。 – Kzqai

+0

我会尝试在分段和生产环境中使用git服务器进行设置,但如果这变得太困难,我认为您的解决方案将成为我的退出路线。谢谢。 – user852091

+0

是的,我可能是一个不寻常的案例,因为我有很多很多的小项目,而不仅仅是一些大项目,所以随着时间的推移,我开始喜欢在几分钟内从头开始复制的方法。祝你好运服务器设置! – avh

3

我有一个类似的设置,我更喜欢使用多个遥控器。因此,我不会使用挂钩,而是将“prod”添加为远程,并将“uat”添加为远程。这样,如果我要推到生产,我可以这样做:

git push prod 
git push uat 
+0

我也是这样做的 – thinkdevcode

+0

我只是拉到我的作品,但它也是它自己的存储库是有用的。这是因为在生产回购时,非基底推动有时很难处理。 – Kzqai

+0

@citizen conn:有道理,谢谢。但有一个问题:你不得不承认你必须承诺加倍 - 无论是为了生产还是生产?如果你在推动之前做了很多小的提交,它会变得有些b,,或者不是? – user852091