转自 http://blog.csdn.net/wsyw126/article/details/52167147

背景描述

在刚开始用git的时候,每次都是将本地将代码push到远程仓库,然后再ssh到服务器上git pull,甚是麻烦。后来在项目开发中使用git的时候,发现push之后,编译系统竟然会有自动部署等功能。顿时觉得这等神器,必须学习一下,所以就请教了吴旭东老师。下面就是我通过Git Hook神器将自己的项目自动化部署到服务器的过程。

自动部署理论

首先要明确现在代码的分布情况,开发者电脑上的本地仓库,git服务器上的远端仓库,web服务器上的另一个本地仓库,我们浏览器访问的就是这里的代码。其实自动部署就是要当从开发者本地仓库提交代码到远端仓库的时候,自动把代码部署到web服务器的本地仓库,实现开发者本地仓库和web服务器的本地仓库的同步。(即通过GitHook中的post-receive脚本文件)

安装过程

  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
    fiunset GIT_DIR
    DeployPath="/var/www/workspace/springSummary"echo "==============================================="
    cd $DeployPath
    echo "deploying the test web"#git stash#git pull origin mastergit fetch --all
    git reset --hard origin/mastertime=`date`
    echo "web server pull at webserver at time: $time."
    echo "================================================"
    

      保存后赋予可执行权限:

    chmod +x /var/www/workspace/springSummary/hooks/post-receive
    

      

    这样在开发者提交代码的时候,就会自动部署。

    在这里需要解释两个问题:

    1. 在这里我使用的是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的内容)

转载于:https://www.cnblogs.com/c-shang/p/git.html

git 服务器自动部署项目之GitHooks相关推荐

  1. git hook 自动部署 linux git本地服务器搭建 git root 目录 git 仓库 git root/ .git

    服务器自动部署项目之GitHooks神器 - CSDN博客 -- 每次都是将本地将代码push到远程仓库,然后再ssh到服务器上git pull,甚是麻烦.在项目开发中使用git的时候,push之后, ...

  2. linux git hook,前端通过githook一键自动部署项目

    git hook 自动部署 本文章教大家,使用git hook来实现本地开发代码一行命令自动上传到远程服务器. 第一步创建空git仓库 终端进入你需要放项目的文件夹,可以通过ssh root@host ...

  3. Window环境下的Git+GitHub+jenkins+Tomcat实现自动部署项目并发送构建邮件

    Git+GitHub+jenkins+Tomcat实现自动部署项目 我们这里要实现的效果是:团队通过Git把项目push到GitHub上去,然后Jenkins通过GitHub的webhook(钩子)来 ...

  4. Eclipse自动部署项目到Tomcat的webapps下的有效方法

    Eclipse自动部署项目到Tomcat的webapps下的有效方法 开发JavaEE项目,常用的工具有MyEclipse,Eclipse,netBeans等,个人比较喜欢用Eclipse,因为它My ...

  5. 自动部署项目,全靠它了!

    前几天我把我的开源项目部署到了云服务器. 我部署的大概流程: 登录到云服务器控制台,新建一个服务器实例(我用的 Ubuntu Linux). 在自己的电脑上生成 SSH 秘钥,将生成的公钥和实例进行绑 ...

  6. 在云服务器上部署项目(下)

    云服务器上部署项目(上):http://blog.csdn.net/gfd54gd5f46/article/details/54331207 5. 从网上下载jpress开源项目     流程:下载j ...

  7. 搭建gitserver并实现git push 自动部署

    git push自动部署能大大提交开发部署效率 git 自动部署分为2类, git server和部署不在同一个服务器上(比如通过github部署) git server和要部署的目录在同一个服务器上 ...

  8. 如何在云服务器上部署项目

    如何在云服务器上面部署项目 注意事项: 首先要有一个云服务器,然后搭建好服务器. 安装好需要的软件:jdk,mysql,tomcat.(注意版本最好与自己本地的一致,避免出现版本问题.) 也可以使用D ...

  9. Pycharm自动部署项目

    Pycharm自动部署项目 欢迎访问我的博客https://www.marxcbr.cn/ 大家好呀,又有几天不见各位了.断更了几天,给大家说声抱歉.清明节大家都挺忙的,有扫墓祭祖的,也有趁小长假去游 ...

最新文章

  1. 百练OJ:2799:浮点数格式
  2. k8s kubesphere安装在k8s中的基础环境准备(前提条件)
  3. 基于CDS view生成的OData服务的metadata是如何生成的
  4. promolike原型开发前后台打通
  5. Vmware 中Linux中NAT网络异常解决方法
  6. [3G/4G]3G/4G模块开发
  7. 敏捷开发团队管理系列之五:大型研发团队的切分(刚参加3.17 MDP团队管理场次的读者请看)...
  8. matlab广州等温线地形图,MATLAB 画等温线.doc
  9. 使用Redis存取数据+数据库存取(spring+java)
  10. CSS颜色代码(转载)
  11. 基于微信小程序的课堂考勤系统设计与实现
  12. 布谷鸟哈希函数的参数_布谷鸟算法详细讲解
  13. 用JavaScript写的U校园自动答题浏览器分析
  14. 对计算机选购的注意事项,购买电脑的一些注意事项
  15. X(解释变量)增加一单位标准差,Y(被解释变量)增加多少标准差?
  16. linux 命令行下的复制和黏贴
  17. 10个副业兼职创业,在家赚钱绝对真实
  18. 判断体型c语言程序,C语言程序设计经典体型.doc
  19. 开源网校系统如何搭建
  20. php 送货单管理系统,送货单管理软件下载

热门文章

  1. ibatis查询SQL语句返回一个对象,此对象包含一个List属性
  2. CAS SSO 原理 - 基础模式
  3. POJ-2635 The Embarrassed Cryptographer 大数取模
  4. 当前标识(NT AUTHORITY\NETWORK SERVICE)没有对“的写访问权限。
  5. 20050823:代理服务器
  6. mysql中使用join exists in时该注意的问题
  7. [Vue CLI 3] 插件开发之 registerCommand 到底做了什么
  8. iOS - UnitTests 单元测试
  9. 【转】OpenStack和Docker、ServerLess能不能决定云计算胜负吗?
  10. 忘记了理想等于人生失去了意义。