diff git 指定时间_【GIT】从指定分支两个Tag中获取差异文件,进行代码的增量更新...
介绍
随着DevOps兴起,在做CD代码上线交付时候,代码全量更新是很费时间的。下面代码就可以帮助我们从指定分支两个Tag中获取差异文件,进行代码的增量更新。
环境
Jenkins
Git代码管理
获取指定分支最新得两个tag
使用到了 git tag -l 命令,git tag -l 名称* 模糊查询标签列表。利用 名称* 方式我们可以区分不同分支的tag。
生成远程执行更新脚本
主要做文件删除。
--diff-filter说明
--diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
只选择那些添加 (A), 赋值 (C), 删除 (D), 修改 (M), 重命名 (R)的文件, 它们的类型(如 普通文件, 符号链接, 子模块, …) 是否改变 (T), 是否未合并 (U), 是未知 (X), 或它们的对崩溃(B). 任何过滤字符的组合(包括none)均可使用。当组合中包括All或none,如果任一文件匹配了其他选项,就选择了所有路径。如果没有文件匹配其他选项,什么都不做。
Diff现在支持接受小写字母参数,含义为展示所有非指定类型的变化。
被删除的文件
由最新的 Tag 和上一个 Tag 做对比,用 --diff-filter=D。
delete_file_list=($(git diff $second_real_tag $first_real_tag --name-only --diff-filter=D))
echo "----------------把要删除得文件写入shell脚本-----------------"
for item in ${delete_file_list[@]};
do
echo $item
echo "rm -rf ${item}" >> update_dir/jenkins_update.sh
done
被重命名的文件
这里有个小技巧,由上一个的 Tag 和最新 Tag 做反向对比,用 --diff-filter=R。
rename_file_list=($(git diff $first_real_tag $second_real_tag --name-only --diff-filter=R))
echo "----------------把重命名的文件也加入删除shell脚本-----------------"
for item in ${rename_file_list[@]};
do
echo $item
echo "rm -rf ${item}" >> update_dir/jenkins_update.sh
done
完整shell脚本
#!/bin/bash
# 创建更新目录
rm -rf update_dir
mkdir update_dir
# 获取最新得两个tag
last_two_tags=($(git tag -l release_*))
last_two_tags_len=${#last_two_tags[*]}
# 获取去除tag其他标识
first_real_tag=${last_two_tags[$last_two_tags_len-1]}
second_real_tag=${last_two_tags[$last_two_tags_len-2]}
echo "----------------当前对比两个版本-----------------"
echo $first_real_tag
echo $second_real_tag
# 创建删除文件列表shell
touch ./update_dir/jenkins_update.sh
echo "#!/bin/bash" >> update_dir/jenkins_update.sh
# 把要删除得文件写入shell脚本
delete_file_list=($(git diff $second_real_tag $first_real_tag --name-only --diff-filter=D))
echo "----------------把要删除得文件写入shell脚本-----------------"
for item in ${delete_file_list[@]};
do
echo $item
echo "rm -rf ${item}" >> update_dir/jenkins_update.sh
done
# 把重命名的文件也加入删除shell脚本
rename_file_list=($(git diff $first_real_tag $second_real_tag --name-only --diff-filter=R))
echo "----------------把重命名的文件也加入删除shell脚本-----------------"
for item in ${rename_file_list[@]};
do
echo $item
echo "rm -rf ${item}" >> update_dir/jenkins_update.sh
done
echo "----------------拷贝要更新的文件到update_dir文件夹-----------------"
# 复制当前版本差异到 update_dir 限制 Add Create Modify Rename 操作
new_file=($(git diff $second_real_tag $first_real_tag --name-only --diff-filter=ACMR))
new_file_len=${#new_file[*]}
if (($new_file_len>0)); then
cp -pv --parents $(git diff $second_real_tag $first_real_tag --name-only --diff-filter=ACMR) ./update_dir/
fi
diff git 指定时间_【GIT】从指定分支两个Tag中获取差异文件,进行代码的增量更新...相关推荐
- html中wmv播放不要自动播放,网页播放器 windowsmediaplay中控制从wmv的指定时间开始播放,指定时间停止播放...
首页 > 网络编程 > 网页播放器 > 网页播放器 windowsmediaplay 网页播放器 windowsmediaplay中控制从wmv的指定时间开始播放,指定时间停止播放 ...
- PHP获取时间戳、获取天周月的起始时间、指定时间所在周、指定时间的各个周等相关函数
目录 一.时间戳和日期互相转换 二.PHP获取今日.昨日.上周.本周.上月.本月的起始时间戳 三.获取当前周的每天的起始时间 四.获取周的起始时间 1.根据指定时间获取所在周的起始时间和结束时间 2. ...
- mysql时间相减得到天数保留两位_mysql 中两个日期相减获得 天 小时 分钟 或者 小时:分钟的格式...
/**有一个需求,要求获得两个日期想减的天数,小时数,分钟数.通过查找资料,于是乎我写出了如下代码,来获得两个字段.*/ IFNULL(CONCAT( IF(aib.`forecast_reply_t ...
- java jar包资源文件_深入jar包:从jar包中读取资源文件
我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看 ...
- java创建指定日期_如何创建指定的日期和时间
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...
- mysql 分区指定路径_[数据库]MySQL 指定各分区路径
[数据库]MySQL 指定各分区路径 0 2016-11-08 18:00:44 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在 ...
- MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
<span style="font-family: 'Microsoft YaHei'; font-size: 14px;">MySQL定时任务event</sp ...
- 查找树的指定层级_非递归层次遍历方法实现二叉树中指定节点的层次数查找
数据结构教材中,提供了基于队列实现一个二叉树的非递归层次遍历算法.但对于一个任意二叉树,如果要查找其中任何一个节点所在的层次数,教科书中并没有给出基于层次遍历的非递归算法.鉴于层次遍历算法比较容易理解 ...
- java 删除指定字符_字符串删除指定位置字符 JAVA 删除字符串中指定的字符
<死侍2>有多不按套路出牌? 要CSS布局HTML小编今天和大家分享用到函数的调用. 编制函数fun,其功能是:删除一个字符串中指定的一.问题描述:从键盘输入一个字符串给str和一个字符给 ...
最新文章
- NET::ERR_CACHE_MISS
- KVM中virtio、vhost 和vhost-user比较(十一)
- push to origin/master was rejected错误解决方案
- 如何跟随有三从零进阶中级CV算法工程师
- java http post 传参数_HttpClient之带参数的post请求
- 复变函数画图cosz图像_用matlab绘制x=(1+cosu)cosv,y=(1+cosu)sinv,z=sinu图像?
- linux 下安装部署mq,RocketMQ在linux下安装部署
- NTP (Network Time Protocol)
- shell脚本监控cpu/内存使用率 转
- 一个简单的samba案例(测试与思考)
- c语言中L''作用,L/C问题: 请问L/C上的49:Confirmation Instruction 有什么作用啊[1]
- [转载] arrayproxy转numpy_Python numpy.ptp() 使用实例
- 【转】如何防止softmax函数上溢出(overflow)和下溢出(underflow)
- 72张三国历史演变地图
- word复制某些公式无响应处理方法
- postgresql.conf bgwriter_lru_multiplier
- 本周大新闻|苹果首款MR没有主打卖点;Meta认为AI是AR OS的基础
- 前辈做的电子地图API调研,转过来…
- CSS hack常用方案(摘选)
- 【云原生】k8s(Kubernetes)中yaml文件快速阅读理解
热门文章
- date-打印或者设置系统日期和时间
- 20155324 《信息安全系统设计基础》课程总结
- Codeforces Round #415 (Div. 2) C. Do you want a date?
- [转载]百分之百自动登录2345王牌技术员联盟源代码(delphi)
- spring:利用Spring AOP 使日志输入与方法分离
- sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert
- Takeown 实现解析
- 法拉利杀手Koenigsegg CCX
- Javascript访问Cookie的四个常用方法
- [转载] Python max() 方法