[英]Push Git branches directly into a live server directory so files are seen live
如何在Git中设置远程目录,我可以在本地将阶段分支推送到远程并查看登台服务器上的实时更改,例如stage.example.com?
我有这个概念(我离开SVN的部分原因)是我可以维护(本地)3个不同的“主”分支,如下所示:
我的想法(以及其他人声称的可能)是我可以从本地计算机维护这些远程“站点”而无需经常登录我的远程服务器shell并运行svn update
(在我当前的svn工作流程中我需要做的事情)这一直......)或者当然在我的Git工作流程中运行遥控器上的git pull
。
如何设置远程目录以便我可以在本地将我的stage
分支推送到staging remote server
并立即查看(例如) stage.example.com
上的更改?
然后,一旦stage
一切正常并经过测试,我就可以在本地能够push
送到live
遥控器,以便我在stage
上测试这些更改到实时网站。
甚至可以这样做,还是我在这里得到疯狂的想法,这些想法根本不是用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
此外,到目前为止,我没有成功尝试以下工作流程:
--bare
Git --bare
(所以我可以从任何地方访问它) master (HEAD)
scp -r
将--bare
git repo从远程服务器复制到我的远程实时域stage.example.com
origin/stage
显然,这不起作用,但我不知道为什么或如何做得更好。
来自SVN背景我是Git的新手,但已经看过很多教程(Peepcode和ThinkVitamin),但仍然无法弄清楚如何设置它。
使用DVCS(“分布式”VCS,如Git或Mercurial)实现的一个概念是,它将发布 (推/拉)的概念添加到分支的概念中。
CVCS(“集中式”VCS,如SVN)仅具有分支(以及一个中央仓库以推送到服务器上)。
在您的情况下,staging或live是发布步骤,即不同的Git repo准备好接收您想要在分段或实时环境中看到的修改。
那意味着:
staging
”分支)或生活(“ live
”分支) staging
或live
分支 一个之间的差post-receive
和post-update
钩是, post-update
一个是为每改性分支执行一次:
请参阅“ Git hook以根据分支推送到远程服务器更新各种Web文件夹 ”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 ...`
, 就像在这个脚本中一样 , ENV['HOME']
指定所述脚本中当前用户的homedir,如果你想要`cd ~/stagedomain.com`
或`--work-tree=~/stagedomain.com`
可以工作(带有`~`
设置在正确的路径上), git pull
,在同一行上取消GIT_DIR
,而不是在你的另一个问题中 `cd ~/stage.mydomain.com && unset GIT_DIR && git pull core stage`
其他命令: `cd ~/stage.mydomain.com && unset GIT_DIR && git pull core stage`
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.