2017-09-13 81 views
0

我使用源代碼在本地工作在一個目錄中。我有兩個分支:master和dev。我想推動我的專用服務器每個分支到自己的目錄,產生一個生產目錄和另一個開發目錄。接下來,我可以配置Nginx來訪問子域上的每一個,等等。獨立的git目錄(master/dev)

我試圖在我的(唯一)project.git/hooks/post-receive中的post-receive文件上使用這段代碼。

#!/bin/bash 

while read oldrev newrev ref 
do 
    branch=`echo $ref | cut -d/ -f3` 

    if [ "master" == "$branch" ]; then 
    git --work-tree=/home/myself/project/site --git-dir=/home/myself/myproject/myproject.git checkout -f 
    echo 'Changes pushed live.' 
    fi 

    if [ "dev" == "$branch" ]; then 
    git --work-tree=/home/myself/myproject/site-dev --git-dir=/home/myself/myproject/myproject.git checkout -f 
    echo 'Changes pushed to dev.' 
    fi 
done 

我嘗試提交dev分支的更改。我推動它成功(「推動開發變化」)。但是我的遠程服務器上的dev目錄根本沒有改變(與master分支相同)。

請問您能幫我嗎?

謝謝!

+1

Git不是發佈工具。您可以將其用於發佈內容,但效果不佳。我建議你考慮一下發布工具。 – Schwern

+0

確實。每當發生變化時,您應該從存儲庫中獲取發佈進程*,而不是相反。這將繼續以多種不同的方式咬你。 – eis

+0

好的,謝謝,我會去經典的方式(推拉目錄):) – Zoloom

回答

0

正如評論中已經提到的那樣。 Git並不是真正的部署工具。你應該讓git-post-recv觸發部署工具來做實際的部署。

但是,deploy-script看起來與上面的鉤子非常相似,並且可能會出現相同的問題。似乎缺少的部分是實際選擇要在site-dev目錄中檢出的dev分支。命令

git --work-tree=/home/myself/myproject/site-dev --git-dir=/home/myself/myproject/myproject.git checkout -f 

將檢出當前的HEAD(通常是主)。嘗試將dev添加到結帳命令。

您可能也有興趣添加一個變種git clean -ffdx來刪除所有git未知的文件,所以你有一個原始的結賬。