2014-10-17 284 views
0

我正在一個網站上工作,並開始使用版本控制(Git),並有幾個分支(現在是「主」和「開發」)。所以我經常致力於「開發」並將其推向Bitbucket。Git在提交/推送部署分支到服務器

我希望我們的開發Web服務器始終擁有最新版本的「開發」分支,而不是通過FTP手動上傳。

我確實可以完全訪問此Web服務器,Windows 2008 R2(但可能可以使用Linux,如果需要的話),因此可以安裝任何我需要的東西。

有關如何做到這一點的任何想法?

我對Git相當陌生,所以請說出我想做什麼只是瘋狂。

回答

2

您可以使用遠程git存儲庫上的post-receive鉤子來捕獲對開發分支的提交,並使其部署(或任何你想要的)分支。

無論何時進行推送,post-receive掛鉤都將在遠程設備上運行。您基本上需要檢測是否對開發分支進行了推送,如果是,則將開發分支簽出到您的部署目錄中。

我後收到看起來是這樣的:設立時

DEPLOYDIR=/directory/you/want/to/deploy/to 
BRANCH=develop 
while read oldrev newrev ref; do 
    if [[ $ref =~ .*/$BRANCH$ ]]; then 
    echo "Ref $ref received. Deploying branch to $DEPLOYDIR" 
    cd $DEPLOYDIR 
    git fetch origin 
    git reset --hard origin/$BRANCH 
    fi 
done 

我發現這篇文章非常有用我的後得到:http://gitolite.com/deploy.html

+0

感謝您的答覆,我想這可能幫助,但一個我不明白的是,它怎麼知道這是一個接收後的鉤子?我在上面的代碼中看不到任何指定這個的東西? – FireLeopard 2014-10-20 10:49:38

+0

「post-receive」掛鉤腳本只是在啓動到遠程服務器的推送時從git自動運行的自定義腳本的名稱。這個特性是內置在git中的。下面是一個更好的描述它的鏈接:http://git-scm.com/book/en/Customizing-Git-Git-Hooks – 2014-10-20 14:32:58

+0

好的,也許我應該改述。 Git如何知道只爲post-receive而不是腳本運行腳本,比如pre-commit或其他什麼? 在Git文檔中,我可以看到的是將文件放入鉤子目錄中的名稱是否正確(無論這應該是什麼意思)。 – FireLeopard 2014-10-20 14:41:45