patch用法

 patch附带有一个很好的帮助,其中罗列了很多选项,但是99%的时间只要两个选项就能满足我们的需要:

   patch -p1 < [patchfile]  //打补丁

   patch -R < [patchfile] (used to undo a patch)  //回退
最近我的笔记本C盘见红,可用空间就剩3G了,在网上查询的清理C盘的方法都试验了,但是可用空间始终升不上来,后来逐个排查,发现C盘中的Windows文件夹很大,大概40G了。。。这个文件夹下最大的是一个叫做installer的隐藏文件夹,查询了好多关于此文件夹的,都说尽量不要碰它,因为里面是安装软件的系统信息文件,如果都删掉的话,可能引起一些软件的使用有问题。于是我就百度搜清理此文件的工具,结果没有搜到。最后在Google上搜了一些国外的关于讨论installer文件夹的网站,功夫不负有心人,发现了这个叫做PatchCleaner的小软件,具体链接为http://www.homedev.com.au/Free/PatchCleaner。用起来很简单,它的基本原理是通过扫描电脑中必须的配对信息文件,通过对比,installer文件夹内的其余的那些.msi和.msp文件被认为是没有用的或者说是过期的,于是可以把他们删除掉,这个软件有个好处是,可以选择move掉这些无用的文件到其他的地方,比如移动硬盘等等,以防止万一卸载某个软件时出现错误,出错的时候可以把那些所谓的无用的文件再move回原来installer文件夹内就可以了。目前通过本人测试以及该软件的开发者调试,基本不影响电脑的正常使用,很好用的一个小软件,具体信息请参考上面的链接,目前未发现国内有这样的清理软件,强烈推荐!
<think>我们正在讨论git am命令处理.patch文件的详细用法。根据引用[2]和引用[3],我们可以总结如下: 1. 首先,生成patch文件通常使用`git format-patch`命令,例如生成单个提交的patch:`git format-patch -1 <commit-id>`,会生成一个以.patch为后缀的文件。 2. 应用patch文件之前,建议先进行检查: - `git apply --stat <patch-file>`:查看这个patch文件修改了哪些文件,以及修改的统计信息(不会实际应用)。 - `git apply --check <patch-file>`:检查这个patch是否可以成功应用到当前分支,如果有冲突会显示,如果没有输出则表示可以应用(不会实际应用)。 3. 使用`git am`命令来应用patch文件,它会将patch应用并生成一个新的提交(包含原提交的所有元信息,如作者、日期、提交信息等): ```bash git am --signoff < <patch-file> ``` 这里`--signoff`选项会在提交信息末尾添加一个签名(Signed-off-by行)。 4. 如果应用过程中出现冲突,可以使用: ```bash git am --reject < <patch-file> ``` 这会将有冲突的部分生成.rej文件,然后需要手动解决冲突。解决冲突后,使用`git add`将解决后的文件加入暂存区,然后运行: ```bash git am --continue ``` 如果想放弃应用这个patch,可以运行: ```bash git am --abort ``` 5. 批量应用多个patch文件:将多个patch文件放在一个目录中,然后使用: ```bash git am /path/to/patches/*.patch ``` 注意:git am会按照文件名排序(字母序)依次应用,所以生成patch时默认的编号格式(如0001、0002)可以保证顺序。 6. 如果patch文件是通过`git format-patch --stdout`生成的(即多个patch在一个文件中),也可以直接使用`git am`来应用这个文件。 7. 其他选项: - `-3`或`--3way`:当应用patch失败时,尝试使用三方合并策略(需要原始文件信息,如果patch中不包含原始文件信息可能无效)。 - `-k`或`--keep`:保留patch中的空行(默认会去除)。 - `--keep-cr`:在换行符为CRLF的系统中保留回车符。 现在,我们根据这些信息来组织回答。 </think> ### `git am` 命令处理 `.patch` 文件的详细指南 `git am` 是专门用于应用 `.patch` 文件的命令,它会将补丁文件转换为完整的 Git 提交(保留作者、日期、提交信息等元数据)。以下是详细操作流程: --- #### 一、基础应用流程 1. **检查补丁内容**(可选): ```bash git apply --stat 0001-fix-bug.patch # 显示修改的文件和行数统计[^2] ``` ![补丁统计输出示例](https://example.com/patch-stats.png) 2. **检测兼容性**: ```bash git apply --check 0001-fix-bug.patch # 无输出表示可应用 ``` 若出现错误,需先解决冲突(见第四部分) 3. **应用补丁并创建提交**: ```bash git am --signoff < 0001-fix-bug.patch # --signoff添加签名 ``` **输出示例**: ``` Applying: Fix null pointer bug in login module Signed-off-by: Your Name <your@email.com> ``` --- #### 二、关键选项解析 | **选项** | **作用** | **示例** | |------------------|--------------------------------------------------------------------------|---------------------------------------| | `--signoff` | 在提交信息末尾添加 `Signed-off-by` 行 | `git am --signoff < patch` | | `--interactive` | 交互模式(逐补丁确认) | `git am -i *.patch` | | `--reject` | 强制应用冲突部分(生成 `.rej` 文件) | `git am --reject conflict.patch` | | `-3` / `--3way` | 使用三方合并策略解决冲突 | `git am -3 multi.patch` | | `--keep-cr` | 保留 Windows 换行符(`CRLF`) | `git am --keep-cr win.patch` | --- #### 三、批量处理技巧 1. **按顺序应用多个补丁**: ```bash ls *.patch | sort -n | xargs -I{} git am {} # 按文件名数字排序应用 ``` 2. **从标准输入读取**: ```bash cat all_commits.patch | git am - # 应用合并后的补丁文件 ``` 3. **跳过指定补丁**: ```bash git am --skip # 跳过当前失败的补丁 ``` --- #### 四、冲突处理方案 当出现 `Patch failed at 0001...` 错误时: ```bash # 1. 生成.rej冲突文件 git am --reject conflict.patch # 2. 手动解决冲突(查看.rej文件) vim file_with_conflict.c # 3. 标记已解决 git add resolved_file.c # 4. 继续应用 git am --continue ``` > **调试工具**: > - `git status` 查看冲突文件 > - `git diff` 检查未解决的冲突 --- #### 五、特殊场景处理 1. **修改作者信息**: ```bash git am --patch-format=mbox \ -c "user.name=New Author" \ -c "user.email=new@email.com" < patchfile ``` 2. **应用到不同分支**: ```bash git checkout feature-branch git am ../patches/0001-fix.patch ``` 3. **二进制文件支持**: ```bash git am --keep-cr --binary < binary.patch ``` --- #### 六、与 `git apply` 的区别 ```mermaid graph LR A[.patch文件] -->|git am| B[完整提交] A -->|git apply| C[工作区修改] C --> D[需手动git add/commit] ``` - **`git am`**:重建提交历史(含元数据)[^2] - **`git apply`**:仅修改工作区文件(需手动提交)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值