今天突然想起要做一个功能, 本地GIT push的时候,服务器端的代码自动更新,不用再做多余的操作。来看下步骤:
环境已有内容: git用户,/home/git目录,和一个已经有的仓库/home/data/git/test.git,git 用户名zhanglong,git的Email:nice5good@126.com
1、使用git用户生成git密钥(把客户端的公钥(id_rsa.pb文件内容)添加到authorized_keys文件,git push,git pull 操作就不需要每次都输入密码了)
$ cd /home/git
$ mkdir .ssh
$ cd .ssh
$ touch authorized_keys //把用户端公钥加入authorized_keys文件
2、生成代码目录,并clone
$ cd /home/wwwroot
$ mkdir test
$ git clone /home/data/git/test.git
$ chown -R git:www test //test目录拥有设为git,所属组改为www(如果不知道git所属组, 使用【groups git 】来查看,可以用【usermod -g www git】来改变git所属组)
$ chmod 775 -R test
3、编写自动更新钩子
$ cd /home/git/test.git/hooks/
$ vim post-receive
#!/bin/bash
unset GIT_DIR
DIR_ONE=/home/wwwroot/default/yczx #此目录是项目目录
LogPath=/home/data/git/yczx.git/hooks #这是记录日志目录
echo -e "\n================= `date +"%Y-%m-%d %H:%M:%S"` ===============\n" >> $LogPath/gitSync.log
cd $DIR_ONE
git pull origin master >> $LogPath/gitSync.log 2>&1
echo "================================================" >> $LogPath/gitSync.log
4、给钩子文件添加执行权限
$ cd /home/data/git/test.git/hooks/
$ chmod +x post-receive //给钩子文件添加执行权限
以上步骤完成git服务器就已经搭建好了,下面来讲一下客户端的使用操作
1、首先生成客户端密钥,且把公钥复制到authorized_keys文件里
$ ssh-keygen -t rsa -C nice5good@126.com //生成密钥
$ cat /userdir/.ssh/id_rsa.pub // 把显示的内容复制到服务端的/home/git/.ssh/authorized_keys文件里
然后把git仓库拷贝下来
$ git clone git@123.456.78.9/home/data/git/test.git
测试操作(git push完成后git自动对web目录做git pull操作)
$ cd test
$ git pull origin master
$ touch test.txt
$ git add .
$ git commit -m'test'
$ git push origin master