2011-01-06 174 views
4

我有一個網站,我想更新,只要我推到遠程存儲庫。我來自svn背景,仍在努力弄清楚git。Git:推送到遠程存儲庫時更新網站?

現在,我也做了以下內容:

  • 設置包含網站我的本地機器上的Git倉庫。
  • 將(裸)存儲庫克隆到我的Web服務器。

現在我有點卡住了。我可以將更改推送到服務器上的裸存儲庫,但我不知道如何在我的www目錄中檢出存儲庫的工作副本,並在將本地存儲庫推送到服務器時自動更新它。我可能需要一個鉤子腳本嗎?

相關問題,Deploy PHP using Git,部分回答我的問題,但我想知道腳本實際上在做什麼。

+0

爲什麼你不保持一個正常的存儲庫,而不是一個在你的服務器上的裸機?並直接推送/服務? – Dogbert 2011-01-06 11:41:40

+0

@Adam:我最初嘗試過,但後來當我嘗試推送(git push web-server)時,出現此錯誤:remote:error:默認情況下,更新非裸倉庫中的當前分支被拒絕,因爲它將使索引和工作樹不一致 – 2011-01-06 11:44:08

回答

3

我發現了一個很不錯的(優雅)的解決方案,我在Caius Theory Website

它基本上是一個純倉庫開始,改變了工作樹到Web服務器文件夾。之後,它使用一個post-receive鉤子來在接收到的每一次推送後更新工作樹。一個優雅和易於遵循的程序!

附加在該文章中,我添加了一個軟鏈接「git的」目錄從網站位置回git倉庫位置設置:

ln -s /home/caius/git/somesite.git/ /home/caius/vhosts/somesite.com/htdocs/.git 

這樣我可以簽在網絡上的另一個分支登錄到服務器並使用網站文件夾中的「git checkout」!

我還對here的Python腳本「ygit-push-all.py」稍作了修改,以更新我的多臺機器,這些機器都使用不同的配置文件運行相同的框架代碼。你甚至可以爲每個服務器設置一個分支(如Demo/Development)。

此外,我增加了以下的別名到我的全球混帳配置文件:

[alias] 
    push-all = !ygit-push-all.py 
    check-all = !sh -c 'git branch -r -v | grep master | awk \"{ print \\$1, \\$2 }\"' 

混帳推,所有將更新所有我的遠程位置

混帳檢查所有會告訴我每個遙控器的轉速主人分支是

相關問題