linux服务器上部署git仓库 实现免密push,pull,同时自动部署线上源码(即是本地推送时,线上代码也自动更行)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37281289/article/details/86668813

首先 本地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

猜你喜欢

转载自blog.csdn.net/weixin_37281289/article/details/86668813