1.实现过程
在linux上安装git服务、创建源版本库、从源版本库克隆得到网站目录,然后利用git中的hooks机制,在git push推送代码到源版本库的时候,触发编写的shell脚本,更新网站目录下的代码。

2.安装git服务

[root@xxx ~]# cd /usr/local/src[root@xxx src]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.15.2.tar.gz[root@xxx src]# tar -zxvf git-2.15.2.tar.gz[root@xxx src]# cd git-2.15.2[root@xxx git-2.15.2]# ./configure --prefix=/usr/local/git[root@xxx git-2.15.2]# make && make install
对git config进行配置,表明当前是哪个用户进行的git操作[root@xxx git-2.15.2]# git config --global user.name xincanzhe[root@xxx git-2.15.2]# git config --glocal user.email 1900103003@qq.com[root@xxx git-2.15.2]# git config --list

3.创建源版本库

创建git管理的用户和组,对git服务进行管理。因为该git账号会被很多人使用进行版本库的克隆,为了安全,禁止使用git用户进行ssh登录[root@xxx git-2.15.2]# groupadd git[root@xxx git-2.15.2]# useradd git -g git[root@xxx git-2.15.2]# passwd git[root@xxx git-2.15.2]# vim /etc/passwd

将git:x:1001:1001::/home/git:/bin/bash改为git:x:1001:1001::/home/git:/bin/git-shell
自定义的总版本库目录:/home/git/gitrepos测试项目的版本库目录:/home/git/gitrepos/test[root@xxx git-2.15.2]# cd /home/git/gitrepos/test[root@xxx test]# git init --bare                #源版本库应该为裸版本库,即需要加参数--bare[root@xxx test]# chown -R git:git /home/git/gitrepos    #修改版本库所属用户和组,即git

3.从源版本库克隆得到网站目录

自定义网站目录:/data/wwwroot/test[root@xxx wwwroot]# git clone git@48.107.56.223:/home/git/gitrepos/test   #格式 git clone 用户@IP:源版本库目录[root@xxx wwwroot]# chown -R git:git /data/wwwroot/test            #修改网站所属用户和组,即git

4.hooks机制

[root@xxx wwwroot]# vim /home/git/gitrepos/test/hooks/post-receive[root@xxx wwwroot]# chmod +x /home/git/gitrepos/test/hooks/post-receive

post-receive文件内容为:#!/bin/bashDIR=/data/wwwroot/testgit --work-tree=${DIR} clean -fdgit --work-tree=${DIR} checkout --force

5.测试
在window环境下,安装对应的git服务(同样需要配置git config),然后创建git库。创建git库有三种方式:
a.从源版本库克隆;
  $    git clone git@48.107.56.223:/home/git/gitrepos/test;
b.在本地新建空目录,创建空的git库,然后与源版本库进行关联;
  $    mkdir test;
  $    git init;
  $    git remote add origin git@48.107.56.223:/home/git/gitrepos/test;
c.将本地已存在的git库与源版本库进行关联,假设已存在的git库为oldtest;
  $    cd oldtest;
  $    git remote add origin git@48.107.56.223:/home/git/gitrepos/test;

这边仅举例从源版本库克隆的方式:$    cd test$    touch readme.txt$    git add readme.txt$    git commit -m "add readme.txt file"$    git status$    git push -u origin master
查看48.107.56.223服务器网站目录是否同步更新[root@xxx ~]# ls /data/wwwroot/test

6.其他git相关命令
版本库放在github官网,需要ssh方式连接,生成公钥:ssh-keygen  -t  rsa  -C  "github账号"
拉取远程版本库代码:git  pull  origin  master

git自动更新网站代码的更多相关文章

  1. svn自动更新网站代码

    运行环境说明:svn的执行目录: /usr/bin/svnsvn版本库目录: /usr/local/nginx/html/svnrepos/coinhello (其中svnrepos是我各个项目版本库 ...

  2. 后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码

    后盾网lavarel视频项目---phpstorm 配置ftp, 自动更新同步代码 一.总结 一句话总结: 1.在phpstorm中设置:路径Tools/Deployment/Configuratio ...

  3. Git github webhook 自动更新/部署代码 php自动更新脚本

    这几天尝试了利用github的webhook,当代码更新到github,我们的测试服务器自动更新最新的gitbub仓库代码. 先列几个大概步骤,有时间再补充详细 1 . 服务器生成ssh key,一般 ...

  4. git 远程版本库,github提供服务原理,git自动更新发送邮件

    1.安装好Linux,安装好Git(192.168.1.239) 2.创建一个用户zph(让此用户提供git on server),密码设置为12345678 # useradd zph # pass ...

  5. ***git 本地提交后如果让服务器上的GIT 自动更新拉取

    Q: 最近配了个服务器,用的GIT,本地提交后服务器必须再拉取一下才能更新出来..求个提交后自动更新的方法 A: 最佳工具 git hook post-update.sample 改名为post-up ...

  6. 在linux写一个shell脚本用maven git自动更新代码并且打包部署

    服务器上必须安装了git maven jdk 并且配置好环境变量 实际服务器中可能运行着多个Java进程,所以重新部署的时候需要先停止原来的java进程,写一个按照名称杀死进程的脚本 kill.sh ...

  7. git fetch 更新远程代码到本地仓库

    理解 fetch 的关键, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某个branch在服务器上的最新状态’.这个列表保存在 .Git/FETCH_HEAD 文件中, 其中每一行对应 ...

  8. git克隆/更新/提交代码步骤及示意图

      1. git clone ssh://flycm.intel.com/scm/at/atSrc 或者git clone ssh://flycm.intel.com/scm/at/atJar 或者g ...

  9. 利用jenkins+git自动执行接口测试代码

    事前准备 部署好jenkins.申请一个码云账号.代码同步至码云 1.在码云上新建一个项目,并把代码同步上去 我设置成了私有项目 2.为项目添加部署公钥 因为是私有项目,所以需要添加一个部署公钥,不然 ...

随机推荐

  1. jquery中获取单选标签redio的val

    $('input:radio:checked').val();

  2. 题目1016:火星A+B(字符串拆分)

    问题来源 http://ac.jobdu.com/problem.php?pid=1016 问题描述 每次输入两个数,不同数位之间用逗号隔开,其中,第n位的进制就是第n个素数,即个位数是2进制的,十位 ...

  3. P3648 [APIO2014]序列分割

    传送门 首先容易证明,得分和切的顺序没有关系 所以直接默认先切左边再切右边就好了 然后显然可以 $dp$ 一开始想的是设 $f[i][j]$ 表示切了 $i$ 次,此次把 $j$ 和 $j+1$ 分开 ...

  4. 剑指offer等算法总结归类

    从数据结构分 一.链表: 3.题目描述:输入一个链表,从尾到头打印链表每个节点的值(递归) 思路:递归调用,调一次,加一次到list中 14.题目描述:输入一个链表,输出该链表中倒数第k个结点 两个指 ...

  5. Jmeter基础元件

    测试计划 1.Test Plan (测试计划) 用来描述一个性能测试,包含与本次性能测试所有相关的功能.也就说JMeter创建性能测试的所有内容是于基于一个计划的. 下面看看一个计划下面都有哪些功能模 ...

  6. Robot Framework常用关键字介绍

    常用关键字介绍 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习 Robot Framework.虽然通过 RIDE 提供“填表”一样的写测试用 ...

  7. sencha touch dataview 中添加 button 等复杂布局并添加监听事件

    config 中的属性默认都会自动生成   getter   setter  applier  updater 四个方法. applier 在调用  setter 时被调用, updater 在属性值 ...

  8. Linux~win10上开启ubuntu子系统

    在进行win10之后,我们可以在它上面安装一个linux子系统,然后就可以使用linux了,你不需要安装虚拟机,也不需要安装双系统! 1 通过Win10任务栏中的Cortana搜索框搜索打开“启用或关 ...

  9. 【javascript】Javascript闭包

    在描述闭包的实现与用途前,需要了解以下一些知识点. 执行上下文(执行上下文环境) console.log(a); //Uncaught ReferenceError: a is not defined ...

  10. Linux 命令学习之ls

    ls(list) 功能说明: ls 命令是Linux中使用最频繁的命令,即list的缩写,默认情况下会罗列出当前文件下的所有文件.同时ls 也可以指定罗列某个文件下的文件.而且该命令可以查看文件的一些 ...