用 diff 与 patch 持久化依赖包的修改

痛点:很多软件项目依赖繁多(特别是 JS 的 node_modules 生态,这里遇到的是本站用的 Flarum,各种插件扩展都以第三方 PHP Composer 依赖形式),有时候遇到 bug 是发生在依赖的库中,解决起来还要处理包管理器的各种版本问题,很是麻烦,尤其是涉及到 CI 自动构建和部署的场景更加头痛,如果纯手动维护则很容易因为忘记而又带来新的 bug。

新的思路:利用 diff 生成的 patch 文件,把 patch 文件放在项目单独的目录,然后再 CI 中引入一个 apply 这些 patch 的流程,把魔改都 apply 过去。从而兼顾了透明与效率,diff / patch 都是古老的 Unix 社区时代就开始流传的工具,经过数十年检验,可靠性也有保障。

目前在 JS、PHP 的语言生态都有对应的解决方案:
JS:ds300/patch-package: Fix broken node modules instantly 
PHP:cweagans/composer-patches: Simple patches plugin for Composer

fun fact:diff和patch是unix极早期就有的工具了,早期(1980s)的hacker们(主要是美国大学生)就是这么共享bsd的源代码以及改进的:找到一个确定版本的bsd源代码,各个大学之间通过共享patch文件来共享自己对bsd unix的改进。

bsd很长一段时间的发展史就是各个大学互传patch的魔改史。至于svn甚至git都是很晚之后才有的了。

但是因为习惯,还有兼容的理由,这些工具基本上遵循最初的diff和patch格式,现在输入git show看到的输出其实就是patch格式,以及git发生合并冲突的时候的这个格式也是来自patch:

用 diff 与 patch 持久化依赖包的修改

给TA打赏
共{{data.count}}人
人已打赏
技术教程

WinForm添加音乐文件到项目中并播放音乐

2022-11-4 17:15:31

技术教程

CSS display 不响应 transition 过渡动画

2022-11-10 15:55:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索