簡體   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