如何在Git中设置远程目录,我可以在本地将阶段分支推送到远程并查看登台服务器上的实时更改,例如stage.example.com?
我所拥有的概念(我离开SVN的部分原因)是我可以维护(本地)3个不同的“主要”分支,如下所示:
我的想法(以及其他人声称的可能)是我可以从本地计算机维护这些远程“站点”,而无需经常登录我的远程服务器shell并运行svn update
(在我目前svn工作流程我需要一直这样做......)或者当然在我的Git工作流程中运行遥控器上的git pull
。
如何设置远程目录,以便我可以在本地将stage
分支推送到staging remote server
并查看上的更改(例如) {{1}马上?
然后,一旦stage.example.com
一切正常并经过测试,我就可以在本地stage
到push
遥控器进行我在{{1}上测试的这些更改到现场网站。
这可以做到这一点,还是我在这里得到疯狂的想法,而这些想法根本不是用Git来完成的?
如果这很重要,请参阅我的本地和远程服务器的一些统计信息:
remote server: Dreamhost (shared account) remote GIT version: 1.7.1.1 remote GIT client: shell local computer: Mac Pro (Snow Leopard 10.6.6) local GIT version: 1.7.2.3 local GIT client: Tower.app // git-tower.com
此外,到目前为止,我未成功尝试了以下工作流程:
live
Git仓库(所以我可以从任何地方访问它)stage
--bare
将master (HEAD)
git repo从远程服务器复制到我的远程实时域scp -r
--bare
显然这不起作用,但我不知道为什么或如何做得更好。
来自SVN背景我是Git的新手,但已经看了很多教程(Peepcode& ThinkVitamin),但仍然无法弄清楚如何设置它。
答案 0 :(得分:4)
使用DVCS(“分布式”VCS,如Git或Mercurial)实现的一个概念是将notion of publication (推/拉)添加到分支的概念中。
CVCS(“集中式”VCS,如SVN)只有分支(以及一个中央仓库,可以推送到服务器上)。
在您的情况下,登台或直播是发布步骤,即不同的Git仓库准备接收您希望在登台或实时环境中看到的修改。
这意味着:
staging
”分支)或实时(“live
”分支)的内容。staging
或live
分支 post-receive
和post-update
挂钩之间的区别在于,对于每个修改过的分支执行post-update
一次:
请参阅“Git hook to update various web folders based on branch pushed to remote server”SO问题。
在初始推送时,执行“git push --all origin
”并在远程裸仓库上创建所有分支。
这个想法是服务器端不应该涉及:只有git --work-tree=/path/to/your/live/files/ checkout live
或git --work-tree=/path/to/your/staging/files/ checkout staging
,具体取决于更新后挂钩的参数:您只需检查裸仓库的文件进入服务器上的这些“文件夹”。
如果您为钩子执行ruby脚本,请确保:
#!/usr/bin/env ruby
,`git ...`
,like in this script,ENV['HOME']
指定所述脚本中当前用户的homedir,如果您希望`cd ~/stagedomain.com`
或`--work-tree=~/stagedomain.com`
等命令工作(将`~`
设置为正确的道路),git pull
,则在同一行上取消设置GIT_DIR
而不是其他命令like in your other question:`cd ~/stage.mydomain.com && unset GIT_DIR && git pull core stage`
。