传统部署方案
     windows 远程桌面
     FTP/SFTP
     登录服务器pull github代码
     Phing(PHP专业部署工具)

git 自动部署流程图

 

服务器端准备工作:
     0. 这些工作都在root或有管理权限的帐号下进行,下面以root为用户,切换到其他用户的时候会提示
     1. 确保安装了git
     2. 为了安全起见,新建一个专门用于代码部署的无特权用户
                useradd -m deployuser
                passwd deployuser #设置该用户的密码,也可根据喜好配置成免密码登陆
     3. 新建一个目录作为要部署代码的根目录,如:
                mkdir /var/www/html/deploy
     4. 将这个目录的属主和属组都改为上面新建的用户deployuser
                cd /var/www/html
                chown deployuser:deployuser deploy
     5. 切换到部署代码的专用用户
                su deployuser
     6. 进入项目根目录,初始化为git仓库
                cd deploy
                git init
     7. 【重要】让仓库接受代码提交
                git config receive.denyCurrentBranch ignore
                [可选] git config core.worktree ~/www
                [可选] git config --bool receive.denyNonFastForwards false #禁止强制推送
     至此,一个空的git仓库就在服务器上建好了,仓库的地址为:
                ssh://deployuser@ipaddress/var/www/html/deploy/.git

本地仓库准备工作:
     1. 通过 git clone 或 git pull 从 github 仓库上将代码获取到本地
     2. 将服务器添加到远程仓库列表,使用名字来区分不同的服务器,如测试服务器可以叫做testing
                git remote add testing ssh://deployuser@ipaddress/var/www/html/deploy/.git
     3. 将本地代码提交到测试服务器上面
                git push testing master

回到服务器端:
    1. 更新服务端 git 仓库状态并检出文件
                cd /var/www/html/deploy
                git update-server-info

git checkout -f
        OR:
                git checkout branch_name # 如果push的不是master分支

2. 检查是不是将文件更新进来了
    3. 设置服务器端更新钩子 post-update
              cd .git/hooks
       新建 post-receive 或将 post-receive.sample 重命名为 post-receive
              touch post-receive
       OR:
              mv post-receive.sample post-receive
              vim post-receive
       将如下内容复制到文件中
                 #!/bin/sh
                 unset GIT_DIR
                 cd ..
                 git checkout -f
       注: 第3步的操作将post-receive 替换为 post-update也可以, 不过需要先将post-update中的exec git update-server-info这一行删掉

后续代码的更新:
     1. github 有更新的时候 pull 更新本地部署仓库
     2. 然后本地先 push 到测试服务器进行测试
     3. 测试通过之后 push 到正式服务器进行上线
     4. 代码的回滚:
               *服务器端回滚:推荐 git reset --hard HEAD^
               本地仓库回滚: 无需登陆服务器即可实现代码回滚,git reset HEAD^ 保留代码回滚,然后使用 git push remote_name local_branch_name -f 强制推送

使用过程中需要注意的问题:
     1. 需要约定好 git 不能更新的操作要怎么处理,比如新增数据库的字段,新安装必要的扩...

使用git做服务器端代码的部署的更多相关文章

  1. 做了一个简易的git 代码自动部署脚本

    做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08)   阅读(200 ...

  2. 搭建Git服务器环境----Git hooks代码自动部署

    引言:自己想搭一套git的服务端环境,不想用github码云等.经多方资料整合,实验总结,以下是亲测有效的方式.可用于公司日常开发 一.搭建Git环境 ① 安装 Git Linux 做为服务器端系统, ...

  3. GIT服务器实现web代码自动部署

    之前在一台vps服务器上面搭建了Git服务器,用来做代码管理,方便团队开发.但是问题也就相应的来了,使用git可以轻松的上传代码,而由于做的是web开发,每次还都得到服务器上把代码手动pull或者复制 ...

  4. Pull Request的过程、基于git做的协同开发、git常见的一些命令、git实现代码的review、git实现版本的管理、gitlab、GitHub上为开源项目贡献代码

    前言: Pull Request的流程 1.fork 首先是找到自己想要pull request的项目, 然后点击fork按钮,此时就会在你的仓库中多出来一个仓库,格式是:自己的账户名/想要pull ...

  5. Eclipse集成Git做团队开发:代码管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  6. 使用 Git Hooks 实现自动项目部署

    最近在某服务器上面搭建 git 开发和部署环境,git 开发环境很简单,按照 ProGit 一书的相关知识就可以轻松搞定,实现了类似 Github 的使用 SSH + 私有 Clone 的方式. 关于 ...

  7. 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本

    持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...

  8. Java代码自动部署

    注:本文来源于<it小熊> [ ①Java代码自动部署-总结简介] 代码部署是每一个软件开发项目组都会有的一个流程,也是从开发环节到发布功能必不可少的环节.对于Java开发者来说,Java ...

  9. jenkins结合脚本实现代码自动化部署及一键回滚至上一版本

    持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...

随机推荐

  1. SQL Server 触发器【转】

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...

  2. https centos6 and 7

    keytool -printcert -sslserver 10.10.192.90:8443 -rfc >nexus.crt 通过  openssl 将 证书转换为 .pem格式的 通过以下命 ...

  3. php获得文件夹下所有文件的递归算法

    function my_scandir($dir){ $files=array(); if(is_dir($dir)) { if($handle=opendir($dir)) { while(($fi ...

  4. easy UI简单使用介绍

    http://www.cnblogs.com/yokoboy/archive/2012/12/06/2806132.html

  5. Compiling Inkscape on Windows

    http://wiki.inkscape.org/wiki/index.php/Compiling_Inkscape_on_Windows http://www.oschina.net/news/80 ...

  6. 【Android开发学习笔记】【第三课】Activity和Intent

    首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activi ...

  7. ADO.NET连接到数据库(oracle)

    本文摘抄于http://www.cnblogs.com/luluping/archive/2009/10/13/1582737.html,如有侵权,请联系博主. OracleConnection 对象 ...

  8. 转NodeJS的npm模块版本号 模式解析

    npm 中的模块版本都需要遵循 semver 2.0 的语义化版本规则. 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的API 修改, 次版本号:当你做了向下兼 ...

  9. 怎么用sql语句查询一个数据库有多少张表

    今天在技术群中闲谈时忽然聊到一个问题,那就是当一个数据库中有多张表时怎么快速的获取到表的个数,从而给问询者一个准确的回答. 大家或许会说,这个问题和我们的数据库操作没有太大关系或者不是很挂钩,所以没意 ...

  10. H264关于RTP协议的实现

    完整的C/S架构的基于RTP/RTCP的H.264视频传输方案.此方案中,在服务器端和客户端分别进行了功能模块设计. 服务器端:RTP封装模块主要是对H.264码流进行打包封装:RTCP分析模块负责产 ...