2013-11-26 91 views
6

我開始通過GIT中部署了幾個網站的插件。爲什麼使用git裸存儲庫進行網站部署?

我已經通過了一些在網絡上的教程和他們都建議創建一個post-update掛鉤的Web服務器上裸露的遠程存儲庫簽入的DocumentRoot目錄。我已經完成了所有工作,沒有太多問題。

爲什麼我們分開工作目錄中的程序存儲庫?將DocumentRoot目錄用作存儲庫,然後使用htaccess來防止公共訪問任何.git內容有什麼問題?

回答

4

實際上,配置不當的htaccess固有的安全風險本身就是一個很好的理由,但主要原因是,默認情況下,您無法推送到非裸回購的檢出分支。 (它可以啓用,但隨後需要git reset --hard更新工作樹,並沒有什麼比擁有一個單獨的部署目錄簡單)

0

這裏有幾個問題,雖然相關的實際上是分開的:

1 - 爲什麼我們分開工作目錄中的程序存儲庫?

因爲git阻止您默認推送到檢出分支。因此,您可以永遠不要推到工作目錄,因爲根據定義,如果它在磁盤上,它將被檢出。

2 - 所有這些建議的Web服務器

隱含的問題是創建一個光禿禿的遠程倉庫:why a bare repo?好吧,裸回購簡直什麼也沒有一個git回購簽出。因此,您可以推送到裸倉庫的任何分支。有些人認爲這種維護更簡單。

二隱含問題:is there an alternative to bare repos?是的,正如提到的限制是只能在簽出的分支。所以,你可以自由地仍然推到非簽出分支 - 也許「部署」,然後有一個鉤來合併未簽出分支到你的工作目錄。

0
  1. 使用的DocumentRoot爲git的工作目錄:

    • 使用拉進行更新,需要外部觸發或cron或手動執行它
    • 需要限制HTTP訪問。git的目錄
    • 做即時編輯/劈在DocumentRoot的可以使用diff使用Git的歷史比較,有利於調試/找到問題
    • 開關分支容易
  2. 使用單獨的裸git的repostory

    • 用戶可以推到這個回購和使用後更新掛鉤來更新DocumentRoot
    • 通常沒有人想在git bare repo中做即時破解,DocumentRoot中的修改不能與git歷史
    • 的DocumentRoot是乾淨
    • 開關分支可能需要修改鉤

所以,似乎獨立的裸git倉庫是更清潔,易於使用,除了需要安裝一個post-update掛鉤。

計劃1也可以使用,在小型項目中使用它或開發機器是好的,但要小心訪問.git目錄的權限,特別是在更改Web服務器時。例如:nginx不支持.htaccess,它通常與其他項目文件一起存儲在git中。

+0

請注意,裸回購計劃仍允許您在documentRoot中進行即時破解 - 只有您無法將其提交以備將來使用,因爲更新後的掛鉤很可能會將其清除。 – slebetman

+0

是的,做即時攻擊有點不同,我會更新答案。 – Fwolf