2013-10-30 83 views
0

我有一個服務器,我的git存儲庫是由--bare參數啓動的。
在鉤子目錄中,我有一個post-receive掛鉤:掛鉤不同分支

#!/bin/bash 
cd /home/git/sureshots.git 
GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f 
echo 'branch master deployed to live' 

我只希望checkout -f當我推到分支 主發生。

  1. 當我推到不同的分支,我work_tree沒有更新,但我仍然看到 「部署住分支主」的迴音。
  2. 我想爲分支版本設置不同的設置。

我想了解子彈1,並學習如何做子彈2
我已經通過文檔搜索,但我無法理解它。 謝謝

回答

1

您需要從stdin中讀取更新的ref,然後在master更新時觸發掛鉤。喜歡的東西:

while read oldrev newrev ref ; do 
    if [ "$ref" == "refs/heads/master" ]; then 
     GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f 
     echo 'branch master deployed to live' 
    fi 
done 

更新:

對不起,我沒有注意到那裏有一個問題。 post-receive腳本總是在任何推動下運行,但您的checkout命令只是檢查當前HEAD應該是什麼(這是主)。如果你需要它來部署一個不同的分支,那麼你需要調整post-receive腳本。

這裏有幾件事要記住。 Git是一個版本控制工具,而不是部署工具。所以雖然你可以做這些事情,但通常不可取。您可以通過擁有一個部署分支,強制對其進行更改(如有必要),並讓腳本簽出部署分支,從而使這項工作更好一些。這樣你就不會腐蝕主人,但仍然可以控制部署的內容。

gitolite文檔有關於使用git as a deployment tool的一些有趣信息,如果您仍然確信它適合您。

+0

很酷,謝謝。這是一個好的第一步。但爲什麼當我推送到另一個分支時腳本運行,但生產目錄沒有得到更改? –

+0

@AndréAlçadaPadez我更新了我的答案,因爲它太長而不適合評論塊。 :-) – jszakmeister

+0

再一次,很好的解釋。謝謝 –