`
TimerBin
  • 浏览: 355647 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于shell获取指定SVN版本号间的改动文件

阅读更多

首先新建svn_update.sh,shell脚本命令如下所示:

BEGIN_VERSION=$1
END_VERSION=$2
#开始版本号-结束版本号 分别对应命令执行中的第一个和第二个参数
echo $BEGIN_VERSION'----'$END_VERSION
#需要将获取到的改动文件所存放放地址
BASE_PATH='/home/root/timerBin/'
#由于SVN路径大多是http://xxx.xxx.xx/svn/timerBin这个样子的我们获取的改动文件日志中不需要这中固定地址所以这里定义变量,在diff时将其replaceAll
REPLACE_PATH='http\:\/\/xxx\.xxx\.xxx\/svn\/timerBin\/code\/trunk'
#SVN共有的更新目录 这里目录和REPLACE_PATH 是相同的 只是缺少了转义
SVN_PATH='http://xxx.xxx.xxx/svn/timerBin/code/trunk'
#获取当前日期
TIME="$(date +"%Y%m%d")"
#循环读取两个版本号之间的改动文件日志信息,并将其结果截取成可用字符串信息 例如:/web/service/timerServince.java
for i in  `svn diff -r $BEGIN_VERSION:$END_VERSION --summarize $SVN_PATH | grep '^[AM]' | sed 's:^[AM]M*\s*::g' | sed 's: :!@!:g' | sed 's:'$REPLACE_PATH'::g'`; do
    #将可用字符串赋值给ALL_PATH变量
	ALL_PATH=`echo $i`;
	#截取ALL_PATH变量目录信息
	PARENT_PATH=`dirname $ALL_PATH`;
	#在存放地址创建目录信息
	mkdir -p ${BASE_PATH}${PARENT_PATH};
	#将改动的文件内容检出到存放地址所创建目录中
	svn export  ${SVN_PATH}${ALL_PATH} ${BASE_PATH}${ALL_PATH};
done
#将两个版本号之间的改动文件日志 保存到相应.txt文件中
cd ${BASE_PATH}
svn diff -r $BEGIN_VERSION:$END_VERSION --summarize $SVN_PATH | grep '^[AM]' | sed 's:^[AM]M*\s*::g' | sed 's: :!@!:g' | sed 's:'$REPLACE_PATH'::g' > ${BASE_PATH}${TIME}.txt
echo 'OK'

    命令的执行方式如下所示:

./svn_update.sh  100010 101000

 

    注:在执行命令之前需要该用户具有以上所有目录的读写权限。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics