2014-02-16 58 views
3

這看起來似乎是一個愚蠢的問題,但我覺得我理解GIT相當好,但似乎無法像我一樣設置自己的開發環境想。我是丟失很簡單的東西,或者我要去一下都錯了:)如何在遠程測試時設置git開發環境

我初始化裸git倉庫我的服務器上,它克隆到我的本地機器上,致力於我的文件,並推到原點。然後,在本地我創建了三個分支(主,發佈,開發)並將它們全部發布到原點。我打算讓多個開發人員從開發分支中拉出來,並且我想確保他們不能推送到主分支,但對於不同的問題可能會更好。

現在,我讓我的更改文件在本地,然後再上傳到測試服務器,並通過Web瀏覽器檢查測試服務器。我不得不想象這是大多數人如何測試他們的工作,除非他們的計算機配置爲Web服務器並安裝了PHP和MySQL。一旦我對自己的變化感到滿意,我將它們推送到原始回購站,一切正常。

我的挑戰在於讓測試服務器與本地機器保持同步。我已經嘗試在遠程測試目錄中設置一個回購站,並且我已經爲本地git回購站添加了第二個遠程站點,希望能夠推送到測試回購站以使測試服務器上的文件與本地文件同步。但我不知道如何有兩個遙控器,並保持他們與我的本地機器同步。

如果我創建一個新的本地分支,檢查出來,開始在一個新功能,然後按下分支到我的遠程測試,測試遙控器上的頭仍掌握,而不是我的新特性分支。因此,我在本地對功能分支進行了更改,但是當我通過結尾將更改發佈到測試服務器時,實際上我正在更改測試回購的主分支上的文件。如果我無法保持測試快照與本地快照同步,我不知道如何充分利用gits分支功能。

我在本地開發和測試真的很關鍵嗎?當你必須遠程測試時,如何使用git建立開發環境?有一個測試回購完全錯誤的方式來思考這個問題?必須有一種方法可以擁有多個遙控器,並讓他們結帳到最新推送的分支,以便您可以在測試服務器上遠程同步本地文件的實例。請幫忙!

+0

嘗試將你的測試運行添加到[git post-commit](https://www.kernel.org/pub/software/scm/git/docs/githooks.html),但切記要將其標記爲可執行文件。 ..讓我知道如果這有幫助或不... – hd1

+0

不要使用Git進行部署,並且絕對不要推到非裸露的回購進行測試。你應該*明確*在本地進行開發(是的,大多數PHP開發人員都有本地的PHP/Apache/MySQL實例)。對於部署,使用像Capistrano這樣的東西,你的生活將會大大簡化。 – meagar

+0

「但這可能會更好的一個不同的問題」 - >對於這部分,您可能想閱讀[如何避免將更改合併到生產分支](http://stackoverflow.com/q/21794003/1796345) – gturri

回答

3

最好在本地進行測試。你可以用這種方式更快地迭代。快速迭代是非常重要的。你花費在git推送和遠程連接延遲上的時間加起來,並且花費比建立完整的本地開發環境更多。

無論哪種方式,在某個點或另一個點上,您也需要遠程測試您的更改。您可以使用測試服務器上的post-receive掛鉤來完成此操作。這是一種方法。

在測試服務器:

  1. 創建您的回購裸克隆。我們稱這個回購爲「測試」。從測試
  2. 克隆,並將其設置爲遠程網站,您在瀏覽器中測試
  3. 創建後收到的測試回購鉤子,將新接收分支更新網站

的後收到鉤子腳本:

#!/bin/sh 
while read oldrev newrev refname 
do 
    upgrade_sh=./upgrade.sh 
    if test -e $upgrade_sh; then 
     upgrade_sh=$(readlink $upgrade_sh || echo $upgrade_sh) 
     echo calling upgrade script: $upgrade_sh 
     $upgrade_sh $refname 
    else 
     echo NOT calling non-existent upgrade script: $upgrade_sh 
    fi 
done 

放入測試.git/hooks,並使其可執行。

我通常在版本控制下將upgrade.sh腳本保留在我的項目中,並從hooks目錄創建它的符號鏈接。升級腳本的upgrade.sh主要工作是部署目錄重置爲您推分支:

#!/bin/sh -e 
unset GIT_DIR 
git checkout -f $1 

在大多數情況下,你想要做的比這更多,例如在我的Django的網站,我需要重新生成靜態內容和信號重新啓動到Apache。

我希望這會幫助你開始。