Git仓库根据不同分支,提交更新到不同站点

Git仓库根据不同分支,提交代码自动同步到服务器不同站点

       昨天试验了自建仓库,本地提交代码自动同步到服务器站点目录,今天尝试根据所提交的分支,代码可以同步到服务器不同站点,毕竟有时候我们的开发环境有正式服、测试服,所以这个功能非常有用。

       一、新建测试站点

       我们昨天新建了一个站点,所在目录是:/home/www/projectHzx,我们今天再新建一个站点目录,用于存放测试代码,输入以下命令

cd /home/www
mkdir projectHzxTest

为了确保我们git账户对站点目录有权限,我们输入以下命令

chown -R git:users /home/www

这样我们就准备了两个站点,分别是

/home/www/projectHzx:正式服
/home/www/projectHzxTest:测试服

       二、修改钩子文件

       我们昨天在仓库钩子目录下新建了一个钩子文件post-receive,用于代码同步,我们需要对文件进行修改

# 进入钩子文件所在目录
cd /home/git/projectHzx.git/hooks
# 编辑钩子文件
vi post-receive

我们设定两个分支,用于正式服:master,测试服:test,钩子内容如下

#!/bin/sh
# 打印开始日志
echo "======= start ======="
# 执行读取逻辑
while read oldrev newrev ref
do
  # 获取当前提交分支
  branch=`echo $ref | cut -d/ -f3`
  # 打印当前分支名
  echo "Target branch: $branch"
  # 判断提交分支是否是主分支
  if [ "master" == "$branch" ]; then
    GIT_WORK_TREE=/home/www/projectHzx git checkout -f $branch
    echo 'changes pushed to master'
  fi
  # 判断提交分支是否是测试分支
  if [ "test" == "$branch" ]; then
    GIT_WORK_TREE=/home/www/projectHzxTest git checkout -f $branch
    echo 'changes pushed to test'
  fi
done
# 打印结束日志
echo "======= end ======="

编辑完记得保存。

       三、实验结果

       我们来检验仓库是否可以根据不同的分支,代码自动更新到不同的目录,我们本地就用昨天那个仓库来做实验,我们先新创一个test分支,并切换到test分支

# 新建并切换到test分支
git checkout -b test

# 如果本地存在test分支
git checkout test

# 查看当前所属分支
git branch -a

新建一个9.txt文件并提交

git add .
git commit -m '提交测试分支'
git push

1.png

我们到服务器站点看看代码是否更新到测试服,以及正式服是否没有更新

2.png

从截图可以看到我们的测试站点目录是有了9.txt文件,正式站点目录是没有这个文件。

       我们现在把test分支合并到master分支里,然后再提交,看他是否会更新到正式站点目录,我们在本地直接输入以下命令

# 切换到master分支
git checkout master
# 查看当前分支,判断是否已经切换到master分支
git branch -a
# 合并test分支代码到master分支
git merge test
# 提交代码
git add .
git commit -m '提交正式分支'
git push

3.png

本地看到提交信息是提交到master分支了,然后我们到服务器看看正式服是否有9.txt文件

4.png

可以看到,代码是成功的提交到了正式服。

       经过一番验证,可以成功的实现根据不同分支,代码提交到不同的站点目录。

0条评论

发表评论