繁体   English   中英

将Git分支直接推送到实时服务器目录,以便实时查看文件

[英]Push Git branches directly into a live server directory so files are seen live

如何在Git中设置远程目录,我可以在本地将阶段分支推送到远程并查看登台服务器上的实时更改,例如stage.example.com?

我有这个概念(我离开SVN的部分原因)是我可以维护(本地)3个不同的“主”分支,如下所示:

  • master - 用于本地开发,工作目录
  • 阶段 - 应与登台服务器目录(远程)同步
  • 直播 - 这应该是可公开访问的网站(远程)

我的想法(以及其他人声称的可能)是我可以从本地计算机维护这些远程“站点”而无需经常登录我的远程服务器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

此外,到目前为止,我没有成功尝试以下工作流程:

  1. 在遥控器上创建一个--bare Git --bare (所以我可以从任何地方访问它)
  2. 将此远程仓库克隆到本地目录,并使用Gi​​t Tower应用程序对其进行管理
  3. 在本地工作master (HEAD)
  4. scp -r--bare git repo从远程服务器复制到我的远程实时域stage.example.com
  5. 将远程添加到本地工作副本,然后尝试推送到origin/stage

显然,这不起作用,但我不知道为什么或如何做得更好。

来自SVN背景我是Git的新手,但已经看过很多教程(Peepcode和ThinkVitamin),但仍然无法弄清楚如何设置它。

使用DVCS(“分布式”VCS,如Git或Mercurial)实现的一个概念是,它将发布 (推/拉)的概念添加到分支的概念中。
CVCS(“集中式”VCS,如SVN)仅具有分支(以及一个中央仓库以推送到服务器上)。

在您的情况下,staging或live是发布步骤,即不同的Git repo准备好接收您想要在分段或实时环境中看到的修改。

那意味着:

  • 2个分支,以跟踪什么属于分期(“ staging ”分支)或生活(“ live ”分支)
  • 1个远程裸仓( 为了能够推送它 ,推动staginglive分支
  • 为了检查并更新工作树 (代表您的实际“暂存”或“实时”文件),为裸仓库提供1 个更新后挂钩
  • 1个本地仓库,您将裸仓库添加为远程仓库,以及可以推送到临时或生活的地方。
    您还可以将裸仓库克隆到需要处理的任何其他本地计算机。

一个之间的差post-receivepost-update钩是, post-update一个是为每改性分支执行一次:
请参阅“ Git hook以根据分支推送到远程服务器更新各种Web文件夹 ”SO问题。

在初始推送时,执行“ git push --all origin ”,并在远程裸仓库上创建所有分支。

这个想法是不应该在服务器端涉及:只有git --work-tree=/path/to/your/live/files/ checkout livegit --work-tree=/path/to/your/staging/files/ checkout staging ,具体取决于更新后挂钩的参数:您只需将裸仓库的文件签出到服务器上的这些“文件夹”中。

如果你为钩子做了一个ruby脚本,请确保:

  • 使用正确的shebang#!/usr/bin/env ruby
  • 使用反引号包围你的git命令就足够了: `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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM