首先 本地window环境已经可以实现ssh免密登录. (具体在上一篇https://mp.csdn.net/postedit/86658005)
在线上部署git其实很简单.
cd /home/git #选定一个目录用于放置裸仓位置,并进入到目录中,一般放在home下
git init --bare demo.git //初始化建一个名为demo.git的空的裸仓, 注意要以.git为结尾. 为什么要用裸仓, 因为裸仓不包含工作目录,即没有源码只是包含版本记录,所以不会被人修改. 如果是想得一个已经存在项目的裸那么在 项目同级目录中 输入
git clone --bare project gitbare.git ( project为已经存在项目的名称, gitbare.git 就是你想导出的裸仓的名字可以随意取,但是以.git为结尾.
至此服务上的git仓库已经部署好.
那么在本地就可以进行克隆推送线上的仓库了.
本地window上打开git bash, 输入 git clone [email protected]:/home/git/demo.git 进行克隆 (git为linux用户名, 111.22.158.99为服务ip地址, home/git/demo.git 为demo.git裸仓在服务上的路径. 按照例子的格式自己套用就克隆下线上代码.) ps: 如果有提示要输入密码,那么是你第一步的免密没有配置好, 不过如例子中输入git的服务器登录密码也能进行操作)
接下来是在本地推送到服务器上的demo.git时, 同时也将部署在服务器上的源码进行自动更新(自动部署)
首先在服务器上输入如下命令:
cd /home/wwwroot/
git clone /home/git/demo.git //克隆demo.git仓库
现在服务器上源码路径为/home/wwwroot/demo
使用/home/git/demo.git 就能更新仓库代码.
为了实现自动化,利用到/home/git/demo.git中的hooks,
cd /home/git/demo.git/hooks/
touch post-receive //创建文件, 这个文件每次在本地推送内容到线上时, 该文件都会被执行
在post-receive文件中写入如下内容,
#!/bin/bash
DEPLOY_PATH="/home/wwwroot/demo"
echo "================================"
echo "service begin pull code"
unset GIT_DIR #这条命令很重要
cd $DEPLOY_PATH
git reset --hard
git pull /home/git/demo.git
time=`date`
echo "service finished pull code at $time"
echo "================================"
其中DEPLOY_PATH="/home/wwwroot/demo" 的路径下写你的源码路径.
同时确保post-receive有执行权限.
其实这个文件就是进入了到源码路径,执行 git pull 更新命令.对源码进行更新.
附加: 如果执行post-receive 文件时间, 报错 unset GIT_DIR: 未找到命令 , remote: fatal: Not a git repository: '.'
试下将unset GIT_DIR #这条命令很重要 换成 GIT_DIR=.git/
the end