- 浏览: 43533 次
- 性别:
- 来自: 济南
文章分类
最新评论
git format-patch:当你想给一个开源项目(例如Rails)提交一段代码的时候,或者你想给小组成员展示一段你并不想提交的代码,那么你还是需要 patch的,Git的'format-patch'命令良好的支持了这个功能。我来基本描述一下使用这个命令的步骤和方法:第一,利用branch命令创建一个分支;第二,修改你的代码;第三,在该分支上提交你的修改;第四,使用'git format-patch'命令来生成一个patch文件,例如:'git format-patch master --stdout > ~/Desktop/tmp.patch'就是将工作分支与master主干的不同,存放在'~/Desktop'文件夹下,生成一个叫做 tmp.patch的文件(另一种简单的版本是利用diff命令,例如'git diff ..master > ~/Desktop/tmp.patch'),这样就生成了patch文件。那么别人就可以使用'git apply'命令来应用patch,例如'git apply ~/Desktop/tmp.patch'就是将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.
下面举两个例子:
你现在有一个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
这样你就需要先看看patch, 然后改改错误的这个文件,让这个patch能够patch上去。
你有一堆patch, 名字是上面提到的那一堆patch, 你把他们放在~/patch-set/目录下(路径随意)
cd opencore git am ~/patch-set/*.patch
(这里git就会按照文件名的顺序一次am这些patch)
如果一切顺利, 你所有的patch都OK了, 你又Lucky了。
不过不顺利的时候十有八九,如果git am中间遇到了patch,am就会停到打这个
patch的地方, 告诉你是哪个patch打不上去。
比如我现在有一个文件file,有两个patch.
file 的内容是
the text more text
两个patch分别是:
0001-add-line.patch:
From 48869ccbced494e05738090afa5a54f2a261df0f Mon Sep 17 00:00:00 2001 From: zhangjiejing <zhangjiejing@zhangjiejing-desktop.(none)> Date: Thu, 22 Apr 2010 13:04:34 +0800 Subject: [PATCH 1/2] add line --- file | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/file b/file index 067780e..685f0fa 100644 --- a/file +++ b/file @@ -3,3 +3,5 @@ file: some text more text + +add line -- 1.6.3.3
0002-change-line.patch:
From f756e1b3a87c216b7e0afea9d15badd033171578 Mon Sep 17 00:00:00 2001 From: zhangjiejing <zhangjiejing@zhangjiejing-desktop.(none)> Date: Thu, 22 Apr 2010 13:05:19 +0800 Subject: [PATCH 2/2] change line --- file | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/file b/file index 685f0fa..7af7852 100644 --- a/file +++ b/file @@ -1,6 +1,6 @@ file: -some text +Change line text more text -- 1.6.3.3
运行
git am *.patch
来merge这些patch, 报错, Patch failed at 0001 add line这样我们看0001这
个patch,原来patch需要的是some text, 而file里面是the text, 所以我们用编
辑器把这行改成some text,
vi file git apply 0001-add-line.patch git add file git am --resolved
在解决完冲突以后, 比如用git add来让git知道你已经解决完冲突了。
如果你发现这个冲突是无法解决的, 要撤销整个am的东西。 可以运行git am –abort,
如果你想只是忽略这一个patch,可以运行git am –skip来跳过这个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.
下面举两个例子:
你现在有一个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
这样你就需要先看看patch, 然后改改错误的这个文件,让这个patch能够patch上去。
你有一堆patch, 名字是上面提到的那一堆patch, 你把他们放在~/patch-set/目录下(路径随意)
cd opencore git am ~/patch-set/*.patch
(这里git就会按照文件名的顺序一次am这些patch)
如果一切顺利, 你所有的patch都OK了, 你又Lucky了。
不过不顺利的时候十有八九,如果git am中间遇到了patch,am就会停到打这个
patch的地方, 告诉你是哪个patch打不上去。
比如我现在有一个文件file,有两个patch.
file 的内容是
the text more text
两个patch分别是:
0001-add-line.patch:
From 48869ccbced494e05738090afa5a54f2a261df0f Mon Sep 17 00:00:00 2001 From: zhangjiejing <zhangjiejing@zhangjiejing-desktop.(none)> Date: Thu, 22 Apr 2010 13:04:34 +0800 Subject: [PATCH 1/2] add line --- file | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/file b/file index 067780e..685f0fa 100644 --- a/file +++ b/file @@ -3,3 +3,5 @@ file: some text more text + +add line -- 1.6.3.3
0002-change-line.patch:
From f756e1b3a87c216b7e0afea9d15badd033171578 Mon Sep 17 00:00:00 2001 From: zhangjiejing <zhangjiejing@zhangjiejing-desktop.(none)> Date: Thu, 22 Apr 2010 13:05:19 +0800 Subject: [PATCH 2/2] change line --- file | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/file b/file index 685f0fa..7af7852 100644 --- a/file +++ b/file @@ -1,6 +1,6 @@ file: -some text +Change line text more text -- 1.6.3.3
运行
git am *.patch
来merge这些patch, 报错, Patch failed at 0001 add line这样我们看0001这
个patch,原来patch需要的是some text, 而file里面是the text, 所以我们用编
辑器把这行改成some text,
vi file git apply 0001-add-line.patch git add file git am --resolved
在解决完冲突以后, 比如用git add来让git知道你已经解决完冲突了。
如果你发现这个冲突是无法解决的, 要撤销整个am的东西。 可以运行git am –abort,
如果你想只是忽略这一个patch,可以运行git am –skip来跳过这个patch.
发表评论
-
linux_shell 特殊符号的介绍
2013-11-28 19:45 0#:注释,行首以#开头为注释 ... -
Ubuntu挂载新硬盘
2013-09-12 18:00 4171、加挂硬盘 sudo hdparm - ... -
U 盘安装系统
2013-06-16 10:16 629[align=left][size=small][size=x ... -
Android 内存溢出的几点解决方法
2013-02-26 14:17 841前言: 堆(HEAP) ... -
虚拟机网络问题
2013-02-25 16:41 594如果WIN7 虚拟机重启后,网络设置没有了。或者是一直断开。这 ... -
ubuntu上配置git服务器
2013-02-07 10:06 6361 需求 硬件需求:一台Ubuntu或者debi ... -
minicom 设置
2013-01-17 14:49 0安装配置minicom ------------------- ... -
Ubuntu10.10 Sun java6 sdk install
2013-01-04 10:28 0Ubuntu 11.10 install Sun Java6 ... -
Zim
2012-12-26 13:48 0Zim源的安装 sudo add-apt-reposito ... -
cifs and smba
2012-12-17 10:59 0linux cifs自动挂载远程win ... -
source: not found
2012-12-14 09:52 0现象: shell脚本中source aaa.sh时提示 so ... -
java url 当中的特殊字符
2012-12-07 17:53 0java处理url中的特殊字符(如&,%...) UR ... -
eclipse 导入jar问题
2012-12-05 19:14 0如果eclipse 报java.awt.*找不到了。。那么估计 ... -
韩信、萧何、张良
2012-12-02 22:57 0萧何知人善用,有政治 ... -
文件系统
2012-11-16 09:35 0二,NFS(network file system)用于Lin ... -
eclipse 环境配置
2012-11-08 22:29 736如果在安装了了eclipse 后,再安装adt插件。然后的wi ... -
ubuntu 下面安装XBMC 设置中文
2012-10-30 23:06 15471.在微软的windows操作系统c:windowsfonts ... -
刷机 s
2012-11-15 19:33 720顾名思义,recovery.img 是为了恢复系统的,相对于普 ...
相关推荐
compute in a way that is compatible with "git patch-id --stable". * The "git log" command by default behaves as if the --mailmap option was given. UI, Workflows & Features * The "git fast-...
- `git format-patch origin`:生成一系列的补丁文件。 - **推送变更**: - `git push remote`:将本地分支推送到远程仓库。 - **打标签**: - `gittag foo`:为当前版本打标签。 #### 冲突处理 - 使用`git add...
这时,你需要手动解决冲突,可以使用`git am --abort`回退,然后通过`patch -p1 < PATCH`应用patch,并手动编辑冲突文件。解决冲突后,再次运行`git am --continue`继续应用剩余的patch。 总结: 了解如何生成和...
git视频教程.9.Git 命令 - git apply、git am、git format-patch.mp4 git视频教程.10.Git 命令 - git svn、git fast-import.mp4 git视频教程.11.Git 命令 - git gc、git fsck、git reflog.mp4 git视频教程.12.Git ...
1. **补丁(Patch)**:通过`git format-patch`和`git am`命令,可以方便地创建和应用补丁文件,这对于邮件列表或非实时协作非常有用。 2. **分支管理**:Git的分支操作轻量且快速,允许开发者频繁地创建和切换分支...
创建补丁可以通过`git format-patch`命令来完成。可以指定分支名或者commit的SHA值,生成的补丁文件通常命名为`0001-Update-xxx.patch`。如果需要将补丁通过email发送,可以使用`git send-email`命令,该命令需要...
- 示例命令:`git am <patch-file>` **4. 公共Git仓库** - **设置公共仓库**:创建一个新的仓库,并将其设置为远程仓库。 - 示例命令:`git remote add origin <public-repo-url>` - **导出仓库**:使用`git ...
- **应用补丁文件**:使用`git am <patch-file>`命令可以将补丁文件应用到当前仓库。 #### 五、进阶主题 - **Git注释**: - **查看注释**:使用`git blame <file>`命令可以查看文件中每一行的最后一次修改者及其...
- **命令**:`git apply <patch-file>` - **作用**:应用补丁文件。 **5.3 git撤销打补丁** - **命令**:`git am --abort` - **作用**:取消正在进行的补丁应用过程。 **5.4 打补丁或pull仓库造成的冲突解决** -...
当你在多台机器上开发时,`git format-patch`可以创建补丁文件,然后通过`git am <patch_file>`在另一台机器上应用这些补丁。 **Git 暂存管理** 暂存区是Git的一个重要特性,`git stash`用于临时保存未提交的改动...
- **应用补丁文件:** 使用`git am <patch-file>`可以从补丁文件中恢复更改。 **Git远程仓库操作:** - **添加远程仓库:** 使用`git remote add <name> <url>`添加新的远程仓库。 - **推送更改:** 使用`git push ...
3. 使用`fetch`命令获取新分支,用`merge`合并代码,`reset --soft`回退到某个版本,然后使用`format-patch`生成补丁,通过邮件发送给可提交的开发者。 4. 使用`am`命令应用补丁,用`rebase`命令与主分支同步。 ...
git am <directory>/*.patch # 应用补丁 ``` 其中,`-n`参数表示生成的补丁文件数量,`<directory>`为保存补丁文件的目录。应用补丁后,可以轻松地在其他分支或项目中复现相同的更改,增强了代码共享的灵活性。 ###...