git客戶端同步到服務器--服務器自動部署項目之GitHooks神器


(注: 引入  http://blog.csdn.net/wsyw126/article/details/52167147)

 總結小點:

1、創建linux空倉庫(詳見“在 Linux 下搭建 Git 服務器”);

2、在項目位置clone倉庫,生成倉庫名的項目;

3、創建master分支(我的方式是git push  origin master一個文件后就自動生成,詳見“git-bash的一些操作命令”);

4、添加hooks(我用於本地window提交到服務器的倉庫后,同步項目代碼)。

 

安裝過程

  1. 在服務器上創建一個裸倉庫(git服務器上的遠端倉庫)

    首先要在服務器上建立一個裸倉庫,我存放裸倉庫的文件夾是/home/workspace/gitbook,進入到該文件夾,然后使用git init –bare springSummary.git創建裸倉庫。 
    在服務器上創建一個普通Git倉庫

  2. 在服務器上建立一個普通Git倉庫用於存放網站的源代碼。(web服務器上的另一個本地倉庫)

    mkdir /var/www/workspace cd /var/www/workspace git clone /home/workspace/gitbook/springSummary.git
  3. 配置Git Hook

    進入到/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 "================================================"
  4. 保存后賦予可執行權限:

    chmod +x /var/www/workspace/springSummary/hooks/post-receive
  5. 這樣在開發者提交代碼的時候,就會自動部署。

    在這里需要解釋兩個問題:

    1. 在這里第一個問題,因為我部署的是一個gitbook項目,所以需要額外在腳本中添加一行指令gitbook build,但是僅添加這一行的話會導致最后這個腳步執行失敗,因為build需要大約8秒時間。所以我的解決方案是在腳本中添加sleep 15,這樣可以等待build執行結束並把結果返回到顯示的終端。(如果只是需要自動更新項目,請把這兩行指令刪去)
    2. 在這里我使用的是git fetch,為什么沒有用git pull實現。區別在於:

      1. git fetch:相當於是從遠程獲取最新版本到本地,不會自動merge。
      2. git pull:相當於是從遠程獲取最新版本並merge到本地。
      3. pull實現相當於fetch后再用merge,來合並本地和遠端的代碼。

      這里就有個問題,如果開發者在提交過程出現失誤,使用git reset復位后,現在遠端的代碼版本低於web端的代碼版本,再使用pull的時候就不能實現和開發者本地的代碼的同步。所以這里使用fetch后,在強制使用reset實現web端的代碼版本指針和git服務端的一致。(如果在本機可以使用stash,然后pull,然后drop剛才stash的內容)

  

問題解決:

1、git pull 報錯:error: insufficient permission for adding an object to repository database .git/objects

解:找到項目里面的文件   sudo chmod 777 -R .git/objects


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM