今天突然想起要做一个功能, 本地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