(注: 引入 http://blog.csdn.net/wsyw126/article/details/52167147)php
總結小點:html
一、建立linux空倉庫(詳見「在 Linux 下搭建 Git 服務器」);linux
二、在項目位置clone倉庫,生成倉庫名的項目;git
三、建立master分支(個人方式是git push origin master一個文件後就自動生成,詳見「git-bash的一些操做命令」);web
四、添加hooks(我用於本地window提交到服務器的倉庫後,同步項目代碼)。spring
在服務器上建立一個裸倉庫(git服務器上的遠端倉庫)bash
首先要在服務器上創建一個裸倉庫,我存放裸倉庫的文件夾是/home/workspace/gitbook,進入到該文件夾,而後使用git init –bare springSummary.git建立裸倉庫。
在服務器上建立一個普通Git倉庫服務器
在服務器上創建一個普通Git倉庫用於存放網站的源代碼。(web服務器上的另外一個本地倉庫)post
mkdir /var/www/workspace cd /var/www/workspace git clone /home/workspace/gitbook/springSummary.git
配置Git Hookfetch
進入到/home/workspace/gitbook/springSummary.git/hooks文件夾,使用vi post-receive建立一個腳本,當你在本地倉庫執行git push後就會觸發post-receive。
post-receive的內容以下:
#!/bin/sh #判斷是否是遠端倉庫 IS_BARE=$(git rev-parse --is-bare-repository) if [ -z "$IS_BARE" ]; then echo >&2 "fatal: post-receive: IS_NOT_BARE" exit 1 fi unset GIT_DIR DeployPath="/var/www/workspace/springSummary" echo "===============================================" cd $DeployPath echo "deploying the test web" #git stash #git pull origin master git fetch --all git reset --hard origin/master #gitbook build #sleep 15 time=`date` echo "web server pull at webserver at time: $time." echo "================================================"
保存後賦予可執行權限:
chmod +x /var/www/workspace/springSummary/hooks/post-receive
這樣在開發者提交代碼的時候,就會自動部署。
在這裏須要解釋兩個問題:
gitbook build
,可是僅添加這一行的話會致使最後這個腳步執行失敗,由於build須要大約8秒時間。因此個人解決方案是在腳本中添加sleep 15
,這樣能夠等待build執行結束並把結果返回到顯示的終端。(若是隻是須要自動更新項目,請把這兩行指令刪去)在這裏我使用的是git fetch,爲何沒有用git pull實現。區別在於:
這裏就有個問題,若是開發者在提交過程出現失誤,使用git reset復位後,如今遠端的代碼版本低於web端的代碼版本,再使用pull的時候就不能實現和開發者本地的代碼的同步。因此這裏使用fetch後,在強制使用reset實現web端的代碼版本指針和git服務端的一致。(若是在本機能夠使用stash,而後pull,而後drop剛纔stash的內容)
一、git pull 報錯:error: insufficient permission for adding an object to repository database .git/objects
解:找到項目裏面的文件 sudo chmod 777 -R .git/objects