patch的制作和使用

diff

 

find differences between two files

diff [option] from-file to-file

 

patch

 

apply a diff file to an original

patch [option] originalfile patchfile

but usually just

patch -pnum < patchfile

 

普通patch

 

(1)制作patch

diff -urN version1 version2 > version1_to_version2.patch

-r 递归

-u 统一格式

-N if a file is found in only one directory, treat it as present but empty in the other directory

(2)应用patch

cd version1

patch -p1 < version1_to_version2.patch

-p1 表示忽略patch路径中的最上层目录

 

git中的patch

 

(1)git diff 生成标准的patch

# mkdir test_patch_proj

# cd test_patch_proj

# git init   // Initialize empty Git repository

# echo "hello, world" > readme.txt

# git add readme.txt   // 提交到index

# git commit -m "initial import"   // 提交到本地仓库

为了修改代码,我们建立一个新的分支。

# git branch fix

# git checkout fix   // 签出fix分支

# echo "bug fixed" >> readme.txt  // 修复完bug了:)

# git diff // 输出的就是patch的内容

# git add readme.txt

# git commit -m "fix branch"

然后把diff的输出变成patch。

# git diff master > fix_bug.patch

然后用git apply来使用这个patch。

# git checkout master

# git apply fix_bug.patch

# git add readme.txt

# git commit -m "apply fix_bug.patch to master"

验证。

# git diff fix

没有输出,证明此时master和fix分支完全相同。

 

(2)git format-patch生成git专用补丁

继续使用上面的例子。

比较fix和master分支,生成patch。

# git format-patch -M master

0001-fix-branch.patch

-M 表示这个patch要和哪个分支对比。

可以看到生成的patch多了一些信息:提交者、提交时间等。

使用git am来应用这种补丁。

# git am 0001-fix-branch.patch

 

两个commit之间的修改(包含commit):

git format-patch <commit1>..<commit2>

 

从某commit以来的修改(不包含commit):

git format-patch <commit>

 

扩展

 

[1] 《怎样为Linux内核打补丁》很详细的文档

[2]   内核补丁制作与提交

[3]  http://www.cnblogs.com/feisky/archive/2012/01/12/2321094.html

 

转载于:https://www.cnblogs.com/aiwz/archive/2012/11/30/6333367.html

### 如何创建应用 Buildroot 补丁 #### 创建补丁 为了向 Buildroot 添加功能或修复错误,通常会涉及到修改现有的源代码并将其打包成补丁文件。以下是具体的操作方法: 对于想要更改的部分,在对应的包目录下进行改动。例如要给某个软件包打上自定义的补丁,则应该把该包放置于 `package/<pkgname>` 下面,并按照官方文档中的指导完成必要的调整[^1]。 当完成了所需的变更之后,可以利用版本控制系统(如 Git)生成差异文件作为补丁提交。假设当前工作区已经包含了所有希望加入到新版本里的变动,那么可以通过执行命令`git diff > my_changes.patch` 来保存这些变化至名为 `my_changes.patch` 的文件中[^2]。 ```bash cd path/to/package/ # 做一些修改... git add . git commit -m "描述性的消息" git format-patch HEAD~1 --stdout > ../mypackage-myfeature.patch ``` 上述脚本展示了如何基于最近一次提交来创建一个单独的补丁文件。这里需要注意的是,最好保持每次只针对一个小的功能点做更新,这样有助于后续维护以及与其他开发者协作时更容易理解管理各个补丁的内容[^3]。 #### 应用补丁 一旦拥有了准备好的 `.patch` 文件,就可以考虑怎样把它集成进 Buildroot 构建环境中去了。最简单的方式就是直接将此文件复制粘贴到目标项目的 patches 子目录内;如果项目结构里不存在这样的子夹,则需自行建立起来用于存放此类资源文件。 另外一种更为推荐的方法是在 package/ 目录下的特定包配置文件 (Config.in 或者 .mk) 中指定外部路径指向所需的应用程序补丁集合。这允许更灵活地管理分发多个相关联的小型修正集而不必每次都手动拷贝单个 patch 文档。 最后一步便是重新运行 menuconfig 工具以确认新的选项已被正确加载进来,并确保所选设置能够反映出刚才所做的全部定制化处理措施。 ```makefile define Package/mypackage/patches $(APPLY_PATCHES) endef $(eval $(call GENTARGETS)) ``` 这段 Makefile 片段示范了如何在构建过程中自动应用位于 `patches/` 目录内的所有 *.patch* 文件。请注意替换实际使用的变量名与函数调用来匹配具体的环境需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值