[转]使用git-am合并git format-patch生成的一系列的patch

本文介绍如何利用git-am工具高效地将一系列带有提交日志的patch文件应用到代码库中,避免信息丢失并简化流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章主要介绍一下git-am 和 format-patch 的使用。 因为在git使用当中,
会有很多时候别人(供应商或者其他的开发人员)发过来一系列的patch,这些patch通常的是类似这样的名字:

0001--JFFS2-community-fix-with-not-use-OOB.patch
0002--Community-patch-for-Fix-mount-error-in.patch
0003--partial-low-interrupt-latency-mode-for-ARM113.patch
0004--for-the-global-I-cache-invalidation-ARM11.patch
0005--1-arm-Add-more-cache-memory-types-macr.patch
0006--2-Port-imx-3.3.0-release-to-2.6.28.patch
0007--3-Add-MX25-support.patch
0008--Move-asm-arch-headers-to-linux-inc-dir.patch
0009--1-regulator-allow-search-by-regulator.patch

里面包含了提交的日志,作者,日期等信息。你想做的是把这些patch引入到你的
代码库中,最好是也可以把日志也引入进来, 方便以后维护用。传统的打patch方式是

patch -p1 < 0001--JFFS2-community-fix-with-not-use-OOB.patch

这样来打patch,但是这样会把这些有用的信息丢失。

由于这些patch显然是用git format-patch来生成的,所以用git的工具应该就可以很好的做好。

git-am 就是作这件事情。

在使用git-am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。
不然会遇到这样的错误。
.git/rebase-apply still exists but mbox given.

git-am 可以一次合并一个文件,或者一个目录下所有的patch,或者你的邮箱目录下的patch.

下面举两个例子:

   1. 你现在有一个code base: small-src, 你的patch文件放在~/patch/0001-trival-patch.patch

cd small-src
git-am ~/patch/0001-trival-patch.patch

如果成功patch上去, 你就可以去喝杯茶了。

如果失败了, git 会提示错误, 比如:

error: patch failed: android/mediascanner.cpp:452
error: android/mediascanner.cpp: patch does not apply    * 如果你发现这个冲突是无法解决的, 要撤销整个am的东西。 可以运行git am –abort,
    * 如果你想只是忽略这一个patch,可以运行git am –skip来跳过这个patch.

### 解决Git Format-Patch Patch 文件 Subject 行中文注释乱码问题 在处理 `git format-patch` 生成patch 文件时,如果发现 Subject 行中的中文注释出现乱码,通常是因为编码设置不一致或者工具链未正确支持 UTF-8 编码。以下是针对该问题的具体解决方案: #### 1. 配置 Git 使用 UTF-8 编码 确保 Git 的核心配置已设定为使用 UTF-8 编码。可以通过以下命令全局启用 UTF-8 支持: ```bash git config --global i18n.commitencoding utf-8 git config --global i18n.logoutputencoding utf-8 ``` 上述命令的作用分别是: - 设置提交日志使用的字符集为 UTF-8[^2]。 - 确保输出的日志也采用 UTF-8 显示。 #### 2. 修改环境变量以支持 UTF-8 某些情况下,操作系统本身的默认编码可能不是 UTF-8,这可能导致生成patch 文件无法正确解析中文字符。可以尝试通过修改环境变量来强制指定编码为 UTF-8: ```bash export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 ``` #### 3. 更新 Msysgit 或重新编译 Git 工具 对于 Windows 平台上的 Msysgit 版本,可能存在对中文支持不足的情况。建议升级至最新版 Msysgit,或考虑更换为其他更完善的 Git 客户端(如 TortoiseGit)。如果仍需自行编译,则可参考 Ubuntu 下的手动安装方法[^3],并确保编译过程中启用了完整的国际化支持。 #### 4. 手动调整 Patch 文件编码 作为临时措施,在生成 patch 后也可以利用外部工具换其编码格式。例如借助 iconv 命令完成从当前错误编码到 UTF-8 的换操作: ```bash iconv -f gbk -t utf-8 original.patch > converted.patch ``` 这里假设原始文件是以 GBK 编码保存的;实际应用时应依据具体情况替换源与目标编码参数。 以上方法综运用即可有效缓解乃至彻底消除因编码差异引发的各种乱码现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值