背景
这里分享一个python写的分离特定的git修改的方法。
主要应用的问题是当时项目组需要同步chromium最新代码,结果带来了巨大量的改动,为了节省我们review新代码的时间,需要将一些不重要的修改(携带某种特征,例如新版本的chromium大量替换了智能指针,将自研的scoped_ptr变成了std::unique_ptr)分离出来,剩下的就是重要的修改了。
解决方案
这里主要用到python的unidiff库,这个库可以解析出标准的unified diff data,git diff恰好就是这个格式。
这个库能精确的最小维度叫做hunk。
所谓hunk,可以理解为diff中的
@@ -162,8 +162,8 @@
xxx代码
这样一块东西,这通常是某个file中的一段连续的修改,而且可以抽离出来单独进行git apply(打代码补丁)
样例代码
该脚本可以利用PatchSet hunk特性,对hunk中的关键语句、字词进行过滤,实现抓取 or 去掉该hunk的效果