背景
目前流行的合入补丁方式是打patch,制作和合入补丁都比较方便,下面来记录一种文件包补丁方式。
制作补丁
导出修改差异文件:
diff -ruq A B > diff.txt
-r 递归子目录
-u 使用统一的输出格式,解决默认忽略大小写问题
-q 不报告差异,只说明两者内容是否有差异
(还有其他方式:svn和git工具直接导出,待扩展)
根据diff.txt里面的描述,3种情况:
1、Only in A/:文件,说明在B中已经删除,需要写clean.sh脚本:rm -rvf A/文件
2、Only in B/:文件,说明在B中是新增,需要拷贝B出来
3、Files A/ Files B/,说明有差异,需要拷贝B出来
拷贝文件保留目录结构路径:
cp --parents B/文件 add_dir (输出:add_dir/B/文件)
批量拷贝操作:
把diff.txt需要拷贝B出来的整理成全路径输出到文件file_list.txt:
B/文件1
B/文件2
批量操作:
tar -cz -T file_list.txt -f diff.tar;(diff.tar解压tar -xf出来就是B文件夹,里面包含了文件的目录结构)
合入补丁
0、运行clean.sh脚本
1、自己没有修改代码就直接把补丁文件解压,然后用命令拷贝覆盖:
cp -arf B/* dest_B/
2、自己有少量修改代码,可以先把自己的修改导出,然后解压补丁进行拷贝覆盖,然后再合入自己的修改
3、若自己有大量修改,建议把补丁文件与自己的文件逐一比较然后合入。
有不足或还有其他更好的操作欢迎留言一起谈论。