2013-10-03 85 views
0

這可能是一個相當基本的問題,但我並不是100%熟悉最好的Git實踐。我正在開發一個定期推送更新的Web應用程序。我在本地機器上有文件,這是我編輯/開發大部分內容的地方。我有一個刪除測試服務器,我在開發過程中推送文件。跨服務器的Git設置

然後我有一個實時遠程生產服務器,其中包含實時應用程序。除了一個例外,所有這些文件都是相同的(期望測試服務器上有新功能)。我有一個config.php文件,它具有各種設置,如數據庫連接設置,路徑,API密鑰等。

我在遠程服務器上添加了一個.gitignore文件,告訴Git忽略config.php文件。如果我添加它,我可以稍後手動覆蓋它。

我根據需要將文件上傳到測試服務器,一旦一切正常,我會從github(存儲所有內容)中將文件拖到活動服務器以啓動文件。

這聽起來是對的嗎?我是錯過了什麼或者做錯了什麼。感謝幫助。

回答

0

對於您的config.php文件問題,請查看此方法,而不是將其從VCS中排除。

if ($_SERVER['SERVER_ADDR'] === 'test-machine-ip') { 
    // config here 
    $config = array(); 
} else { 
    // production or other config, you get the idea 
    $config = array(); 
} 

關於測試/現場服務器的更新;如果你有一個獨立的服務器,你提到的方法應該沒問題,否則你應該實現git鉤子,根據你推送的特定分支自動更新,比如testingproduction

鉤子可以讓你有一個類似的過程:

  1. 推送到遠程原點(到位桶等)
  2. 到位桶具有鉤設置,POST提交數據到服務器(分支名等等)
  3. 您的腳本將讀取提交併根據提交數據採取相應措施。

該方法適用於生產服務器,同時仍然使用其他方法用於通常只有一個盒子的測試服務器。大多數在線上找到的小腳本都不具備分支檢測功能。

這裏有一些資源,讓你開始

注意的方法,自動部署是怎麼做的改變。

如果你有幾個生產服務器等,並且還可以免除SSH服務器執行pull操作的麻煩(儘管你可以爲此編寫腳本),這種方法很有用。