2012-09-07 27 views
1

我正在將我們的代碼庫從svn轉換到git。如何最好地處理Git部署對於多個Web服務器

我們目前的部署過程是運行一個內部腳本,將最新的svn修訂版檢出到新創建的目錄中,以便在服務器上創建工作副本。然後,它運行需要發生的任何sql命令,並將curent工作副本的符號鏈接更改爲新檢出的工作副本。

這是一種處理更新的簡單方法,它允許我們通過在出現問題時更改符號鏈接來輕鬆地將代碼庫回滾到舊代碼庫。

是否有可能從git服務器只抓取一個指定的分支到新創建的目錄中,還是需要克隆存儲庫的全部內容?

或者是有更好的方法來處理代碼庫與git?

+0

git-export可以做你想做的 - 看到http://stackoverflow.com/questions/160608/how-to- do-a-git-export-like-svn-export –

回答

2

git中的每個提交都由「sha1」id標識。此ID代表文件的確切快照。因此,不要創建多個工作副本並對其進行符號化,而只需執行特定提交的git checkout即可。要回滾你只需檢出最後一次已知的好提交ID。由於checkout的工作速度非常快(與SVN相比)並且不依賴網絡回購(因此它永遠不會失敗),所以我建議您忘記符號化惡夢。

爲了製作更多人性化的ID,你可以利用標籤(本質上是一個人類可讀的提交ID別名)。

+0

除了阻止用戶訪問.git目錄,是否存在與直接從git存儲庫運行網站代碼庫相關的任何安全風險? – Aglystas

+0

@Aglystas你不應該共享根文件夾。只需更改佈局。在回購根目錄下創建一個文件夾'WebContent'並僅分享它,在這種情況下,你不會關心'.git'文件夾。 – kan

+0

@Aglystas因此,這對svn來說也是一個很好的優勢,因爲svn在每個文件夾中都有'.svn',所以你應該關心共享工作副本的訪問控制。 – kan

0

Git是一個分佈式存儲庫。當你做一個git克隆時,你需要克隆整個存儲庫,你不能僅僅克隆一個分支或者一個sha編號。然而,git壓縮得相當好,你不應該因爲git而使用你的策略。

我們這樣做是爲了我的工作,現在已經使用這種方法已經有5年多了 - 它不會讓我們放慢腳步,我們有持續交付系統,可以讓我們在一天內多次部署到生產環境,部署大約3分鐘 - 取決於數據庫遷移。

對不起,答案是 - 您必須克隆整個存儲庫。

0

我們有以下方案:

  1. 我們使用gitolite訪問控制我們的網絡資源庫,並有我們構建服務器使用僅具有讀取訪問倉庫特殊SSH密鑰。
  2. 我們在構建機器上有一個完整的克隆,並定期從我們的構建腳本中獲取。
  3. 我們使用標籤名稱來標記要構建的東西。我們使用2012-09-01 [a-z]作爲這些名稱的模式,因爲它們的排序很好。例如。 2012-09-01之後是2012-09-01a,如果您每天需要多個構建版本......也可以使用完整的時間戳。
  4. 當自動shell腳本看到要更改的標籤(最後一個標籤是最新的標籤)時,會執行檢出/重建。

不需要符號鏈接,因爲checkout在git中速度超快。您還可以使用

git -xfd clean 

,以確保您的源代碼樹的情況下,整潔明亮腳本離開克魯夫特左右。

你的開發團隊,然後只需要做出標記,並將它推到獲得更新的構建:

git tag 2012-09-01 
git push 

當然標籤,並可以使用嵌套的名字,所以你可以做這樣的事情:

git tag test/2012-09-01 
git tag release/2012-09-01 
... 

分類你正在做的事情:測試修正,工作到發佈等。