#!/bin/bash
#@author: hry
#@desc: 提取两个git版本之间变动文件,然后copy这部分变动文件到web目录中,此脚本用于发布文件
#@params: none
#git副本working目录
workingBaseDir=/webdata/webdir/b2b2c
#web网站目录
dstDir=/data/b2b2c
#脚本文件和保存版本信息文件的路径
scriptDir=/root
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/php56/bin
rsync_opts="-zvrtl --no-p --no-o --progress --delete --ignore-errors"
cd $workingBaseDir
git pull
lastVer=`cat $scriptDir/.version_log.txt`
yongestVer=`cat $workingBaseDir/.git/refs/heads/main`
if [ "$lastVer" = "$yongestVer" ];then
echo "当前已是最新版本,没有版本差异"
exit 0
fi
## 此处用户对比两个版本号之间文件变动,并过略掉删除的文件
git diff --name-status $lastVer $yongestVer|sed "s/^\+//g"|awk '/^[^D ]/ {print $2}' > $scriptDir/git_log.txt 2>/dev/null
echo -e "$yongestVer" >$scriptDir/.version_log.txt
sed -r 's/\s+$//g' -i $scriptDir/.version_log.txt
if [[ $(cat $scriptDir/git_log.txt 2>/dev/null) != "" ]];then
# 如果不小心更改了根目录属性,此时会导致整个目录发布,排除这种情况
sed -i '/^[.]$/d' $scriptDir/.version_log.txt
#备份上一次checkou文件
mv $scriptDir/checkout_dir $scriptDir/checkout_bak/bak"_"`date +%Y%m%d%H%M%S`
mkdir -p $scriptDir/checkout_dir
#通过rsync把 git_log.txt 记录的文件copy出来[带路径]
rsync $rsync_opts --exclude=".git" --exclude="*.db" --exclude="runtime/" --files-from=$scriptDir/git_log.txt $workingBaseDir $scriptDir/checkout_dir >/dev/null 2>&1
fi
#执行copy
\cp -rp $scriptDir/checkout_dir/* $dstDir
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!