[英]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.