9

我們使用git大多數我們建立在我們的商店的web應用程序,儘管應用程序本身使用多種技術(PHP,Rails的,等等),我們通常有一個分期和生產每個站點的服務器。通常,這些服務器具有不同的數據庫憑據集以及不同的基於環境的配置設置(例如緩存)。我們的工作流程通常涉及每個項目維護兩個git分支:反映生產服務器的master和反映分段的分段。新功能在分段(或子分支)上開發,並在完成和部署後合併回主。混帳:應用程序配置和不同的環境

我的問題是關於維護是科順和特定環境的配置文件的最好方法。我已經看到類似問題herehere的答案,但都沒有真正滿足。主要的兩種方法似乎是a)使用.gitignore排除將配置文件留在git的權限範圍之外,或者b)編寫反射的,環境感知的代碼,其確定例如根據主機名使用哪些數據庫憑證。我對a)的問題是它只允許一組配置文件存在於代碼庫中(不管當前分支),所以其他環境的配置文件會丟失。另一方面,b)似乎需要對代碼庫進行不必要的修改,這種方式與應用程序的功能無關。理想情況下,我想要一種方式來鎖定某個分支內的配置文件,這樣無論何時我簽出master,我都會得到master配置文件,並且每當我結帳時,就會得到配置文件。另外,將分段合併到主設備中不應以任何方式影響主配置文件。迄今爲止,我們已經通過在git根目錄之外包含特定於環境的配置文件的文件夾進行處理,並在部署時手動將相應的文件移動到代碼庫中,但這當然是不必要的破解(並且可能是危險的)。

有什麼辦法可以用git來完成這個任務嗎?

感謝您的考慮!

+0

將http://stackoverflow.com/questions/2154948/how-can-i-track-system-specific-config-files-in-a-repo-project/2155355#2155355結合http:// stackoverflow .com/questions/3207575/how-do-i-open-source-my-rails-apps-without-giving-away-the-apps-secret-keys-and/3207608#3207608 help here? – VonC 2010-07-09 15:33:48

回答

12

不知道爲什麼人們認爲他們可以逃脫沒有某種形式的安裝工具。 Git關於跟蹤源代碼,而不是關於部署。你應該還有一個「make install」類型的工具,可以從你的git倉庫到實際的部署,這個工具可以做很多事情,比如模板擴展或者替代文件的選擇。例如,您可能已將「config.staging」和「config.production」簽入git,並且當您部署到分段時,安裝工具會選擇「config.staging」以複製到「config」。或者你可能有一個單獨的「config.template」文件,它將被模板化以在部署中進行「配置」。

+0

是的,這通常是我如何做事。我使用了一個部署工具(我主要與Django一起工作,所以我使用Fabric或Capistrano,在我正在使用Rails應用程序的罕見實例中)在部署時自動移動或設置符號鏈接到適當的配置文件。 – mipadi 2010-07-09 16:24:19

0

我認爲通常情況下,只有master認爲已經在staging提交。如果您向master添加了一個額外的提交,其中包含兩個分支之間的配置差異,那麼在staging之後重新提交此提交應保持該配置。這並不像「合併到主服務器不應該以任何方式影響主配置文件」那樣簡單,但是由於在這些情況下你會遇到合併衝突,它可能已經足夠接近了。

3

你可以嘗試使用合併後或結賬後掛鉤,以確認一切都是理所應當的,否則解決它。這實際上是seems to be suggested by the ProGit book

的概念基本上是寫那些鉤子充當微型「使安裝」的腳本,確保分公司的正確配置,由主機,在存在或其他文件,通過任何你喜歡的內容。鉤子甚至可以重寫你的配置文件或者通過填充模板來重新創建它們。

相關問題