patch_patchgan - CSDN
精华内容
参与话题
  • Linux下生成patch和打patch

    万次阅读 2013-12-13 10:58:33
    通过diff工具生成补丁, patch工具打上补丁. 在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须保留原来的文件名, 例如, 如果你...

    通过diff工具生成补丁, patch工具打上补丁.

    在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须保留原来的文件名, 例如, 如果你修改源码中的a.c文件, 那么, 修改后的文件还是名为a.c, 在修改之前你可以复制a.c为a.orig.c进行备份.

    1.为单个文件生成补丁

    $ diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c
    这条命令会产生类似如下的输出, 你将它重定向到一个文件中, 这个文件就是patch.
    diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800
    +++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800
    @@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)
    参数详解:
    -u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息.
    -p 显示代码所在的c函数的信息.

    2.为多个文件生成补丁

    $ diff -uprN linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/
    这条命令对比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/两个目录下的所有源码差异.
    参数详解:
    -r 递归地对比一个目录和它的所有子目录(即整个目录树).
    -N 如果某个文件缺少了, 就当作是空文件来对比. 如果不使用本选项, 当diff发现旧代码或者新代码缺少文件时, 只简单的提示缺少文件. 如果使用本选项, 会将新添加的文件全新打印出来作为新增的部分.

    3.打补丁

    生成的补丁中, 路径信息包含了你的Linux源码根目录的名称, 但其他人的源码根目录可能是其它名字, 所以, 打补丁时, 要进入你的Linux源码根目录, 并且告诉patch工具, 请忽略补丁中的路径的第一级目录(参数-p1).
    $ patch -p1 < patch1.diff
    diff命令必须在整个Linux源码的根目录的上一级目录中执行.

    4. 示例

    给修改过的内核生成patch,然后用生成的patch给未修改过的内核打补丁
    其中,目录linux-2.6.31.3为未修改过的内核,目录linux-2.6.31.3_1为修改过的内核
    $ diff -uparN linux-2.6.31.3 linux-2.6.31.3_1/ > mypatch
    $ cd linux-2.6.31.3
    $ patch -p1 < mypatch

     

    展开全文
  • 如何打Patch

    千次阅读 2018-10-17 11:02:47
    在团队开发的过程中,经常需要生成patch,或者打上别人提供的patch,那么一般情况是如何操作的呢。 首先生成patch需要有两个工程,一个修改前的A工程,一个修改后的B工程。 使用linux命令diff就可以生成patch了。...

    在团队开发的过程中,经常需要生成patch,或者打上别人提供的patch,那么一般情况是如何操作的呢。
    首先生成patch需要有两个工程,一个修改前的A工程,一个修改后的B工程。

    使用linux命令diff就可以生成patch了。格式如下:

    diff -Naur path/to/A_Project path/to/B_Project > Project.patch

    -N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
    -a 将所有文件都当作文本文件处理。
    -u 输出每个修改前后的3行,也可以用-u5等指定输出更多上下文。
    -r 递归。设置后diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。

    生成patch以后,在修改前A工程根目录下使用patch命令打上patch。

    $ cd path/to/A_Project
    $ patch -p1 < Project.patch
        -p Num 忽略几层文件夹
    

    为了解释 -p 参数,需要看看如下patch文件片段:

    --- old/modules/pcitable       Mon Sep 27 11:03:56 1999                                          +++ new/modules/pcitable       Tue Dec 19 20:05:41 2000
    

    如果使用参数 -p0,那就表示从当前目录找一个叫做old的文件夹,再在它下面寻找 modules/pcitable 文件来执行patch操作。
    而如果使用参数 -p1,那就表示忽略第一层目录(即不管old),从当前目录寻找 modules的文件夹,再在它下面找pcitable

    如果要取消补丁做出的更改,恢复旧版本,在A工程的根目录下执行以下命令,A工程就会恢复成没有打patch的样子:

    $ patch -RE -p0 < Project.patch

    由Git管理的工程处理patch的方法:

    • 【生成patch】

    分支master 上是没修改前的,分支patch 上是修改以后的打patch的。

    1. 先切换到 patch分支
      git checkout patch

    2. 生成patch
      git format-patch -M master
      会生成一个文件名如:0002-Release-version-1.4.6.patch 的patch文件

    • 【合并patch】

    拿到patch以后,执行下面的命令:

    git am 0002-Release-version-1.4.6.patch
    如果不想直接commit,那么可以用下面这个命令打patch:

    patch -p1 < 0002-Release-version-1.4.6.patch
    然后手动commit 。

    作者:cch___
    来源:CSDN
    原文:https://blog.csdn.net/cch___/article/details/53405450?utm_source=copy
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 如何使用git 生成patch 和打入patch

    万次阅读 多人点赞 2017-03-07 10:08:14
    平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project ,基于这样一个场景,我把git 如何生成patch 和如何打入patch 做...

    平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project ,基于这样一个场景,我把git 如何生成patch 和如何打入patch 做总结


    生成patch 的方法:(我这里描述的生成patch 是根据commit 记录生成的)

    1.例如首先先通过git log 查看有哪一些commit



    2.把第一次commit 提交以后的(不包括第一次提交)都生成patch 

    如上图所示:使用命令:git format-patche795fefabc

    然后生成的patch 文件如下图所示



    打入patch 的方法:

    把生成的patch 文件copy 到一个文件夹中来(这里我创建了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,如下图所示:






    ================------------------------=============--------------=================


    1 使用git format-patch生成所需要的patch:
    当前分支所有超前master的提交:
    git format-patch -M master
    某次提交以后的所有patch:
    git format-patch 4e16 --4e16指的是commit名
    从根到指定提交的所有patch:
    git format-patch --root 4e16
    某两次提交之间的所有patch:
    git format-patch 365a..4e16 --365a和4e16分别对应两次提交的名称
    某次提交(含)之前的几次提交:
    git format-patch –n 07fe --n指patch数,07fe对应提交的名称
    故,单次提交即为:
    git format-patch -1 07fe
    git format-patch生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files选项,则文件名只有编号,不包含提交信息;如果指定了--stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定-o <dir>指定patch的存放目录;


    2应用patch:
    先检查patch文件:git apply --stat newpatch.patch
    检查能否应用成功:git apply --check newpatch.patch
    打补丁:git am --signoff < newpatch.patch

    (使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息)


    如果应用patch出现问题:

    比如,一个典型的git am失败,可能是这样的:
    $ git am PATCH
    Applying: PACTH DESCRIPTION
    error: patch failed: file.c:137
    error: file.c: patch does not apply
    error: patch failed: Makefile:24
    error: libavfilter/Makefile: patch does not apply
    Patch failed at 0001 PATCH DESCRIPTION
    When you have resolved this problem run "git am --resolved".
    If you would prefer to skip this patch, instead run "git am --skip".
    To restore the original branch and stop patching run "git am --abort".

    正如你所见,如果冲突发生,git只是输出上述信息,然后就停下来。一个小冲突会导致整个patch都不会被集成。

    处理这种问题的最简单方法是先使用 git am --abort,然后手动的添加此patch, patch -p1 < PATCH,手动解决掉代码冲突,最后使用 git commit -a 提交代码。但是这样做有个问题就是你会失去PATCH中原本包含的commit信息(比如From,Date,Subject,Signed-off-by等)。应该有一种更聪明的方法。

    在 .git/rebase-apply 目录下,存放着相应的补丁文件,名字是“0001” (在更新的git版本中,存放补丁文件的目录名有所改变,这里使用的git版本是 1.7.4.1)。

    事实上,你可以使用 git apply 命令打patch(git apply 是git中的patch命令)。如同使用 patch -p1 命令时一样,然后手动解决代码冲突(检视生成的 .rej 文件,与冲突文件比较,修改冲突内容,并最终把文件加入到index中):

    $ git apply PATCH --reject
    $ edit edit edit
    (译注:根据.rej文件手动解决所有冲突)
    $ git add FIXED_FILES
    $ git am --resolved

    就这么简单!
    想多一些解释,好吧。git am 并不改变index,你需要使用 git apply --reject 打patch(保存在 .git/rebase-apply),手动解决代码冲突,(译注:使用 git status 列出所有涉及文件),把所有文件(不仅仅是引起冲突的文件)添加到(git add)index,最后告诉 git am 你已经解决(--resolved)了问题。这样做的好处是你不需要重新编辑commit信息。而且,如果你正在打的是一系列patch(就是说你在打的是多个patch,比如 git am *.patch)你不需要使用 git am --abort,然后又 git am。

    参考资料:

    Git-format-patch(1) - Linux man page http://linux.die.net/man/1/git-format-patch

    How to create and apply a patch with Git http://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git





    展开全文
  • patch的方法

    千次阅读 2015-11-27 13:05:02
    如果我们现在有一份源码,另外还有一份基于上一版本的patch, 所谓patch即补丁,为了实现某一功能或修改某些bug而生成的。 1>先来看看patch的语法,这里以patch一块的内容为例 diff --git a/minui/minui.h b/minui/...

    如果我们现在有一份源码,另外还有一份基于上一版本的patch,

    所谓patch即补丁,为了实现某一功能或修改某些bug而生成的。

    1>先来看看patch的语法,这里以patch一块的内容为例

    diff --git a/minui/minui.h b/minui/minui.h
    old mode 100644
    new mode 100755
    index a73eb7b..3ea87f9
    --- a/minui/minui.h
    +++ b/minui/minui.h
    @@ -59,6 +59,8 @@ int gr_measure(const char *s);
     void gr_font_size(int *x, int *y);
     
     void gr_blit(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);
    +void gr_BarAndBall(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);//<ASUS_BSP Jie_Lain 20151112 +++> add for RecoveryUI
    +
     unsigned int gr_get_width(gr_surface surface);
     unsigned int gr_get_height(gr_surface surface);
    ①minui.h表示需要修改的文件,---表示源文件minui.h,+++表示目标文件minui.h

    @@是diff的块差异语法,即开始修改的行数,用@@来标记开始和结束

    这里的标记是@@-59,6 +59,8@@

    ②-59即源文件的第59行,-59,6表示原文件59行开始的6行

    故+59,8表示目标文件59行开始的8行,

    没有+-符号的行表示没有改动的行:

    int gr_measure(const char *s);

     void gr_font_size(int *x, int *y);
     void gr_blit(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);

    ③然后+开始加内容了

    +void gr_BarAndBall(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);//<ASUS_BSP Jie_Lain 20151112 +++> add for RecoveryUI
    +

    加一行指定内容和空行

    后面两行又是没有改动的内容

    语法就是这样,很简单吧


    2>下面介绍打patch的方法

    ①先来看看我的patch是哪里的,

    看名字 0001-update-recovery-ui.patch

    明显这是bootable/recovery的patch,所以需要先进去目录

    $cd bootable/recovery/

    ②git am

    $git am ~/patch

    这里的~/patch指我的patch所在的目录,patch放在哪里路径就写什么好了

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


    执行git am ~/patch后,如果所修改的文件都能按照patch所描述的diff添加或修改进入,就会直接修改,否则报错,可以看到这里有众多error

    由于目前的patch是上以版本的patch,由于行号变量等不一致,所以打到当前版本很有可能会不成功,这时候就需要我们手动修改patch所要修改的内容

    来实现patch的功能

    ③git apply patch --reject

    $git apply ~/patch --reject

    这条命令就是指出所有patch不成功的段,并生成rej文件在相应目录下,rej文件其实就是patch不成功的那一小部分


    再去看看git status

    可以看到刚刚生成的rej文件了呢

    所以根据rej文件的内容修改code就好了呢,需要适当修改行数变量什么的,自己掌握就好了

    修改好后build通过后,将rej文件删除,将修改过或添加的文件$git add后(如果添加所有改动$git add --all)

    $git am --continue代表我们已经修改好了error,注意一定修改正确后再执行--continue,否则将退出am状态

    或者退出am恢复原有分支$git am --abort



    展开全文
  • 如何使用patch命令打补丁

    万次阅读 2018-11-09 10:01:15
    有时候因为条件限制,我们不能使用git仓库进行...这时,使用patch是一个不错的办法。 确保你的服务器上安装了patch命令。如果没有安装,在联网状态下安装一下也就几分钟的事。 在你本地生成patch文件。在你的git仓...
  • 在阅读基于深度卷积神经网络的图像识别、分类或检测的文献时经常看到“patch”,不是很能理解,后来就总结了一下。 通过阅读,“patch”似乎是CNN输入图像的其中一小块,但它究竟是什么呢?当使用CNN解决问题时,...
  • patch命令用法

    万次阅读 2017-07-02 20:20:29
    作为程序员,了解diff和patch命令是非常必要的。比如说发现某个项目有bug,而自己又没有提交权限,此时最合适的解决方法就是用diff命令做一个补丁发给组长。组长看到补丁后会立刻明白你的意图。 有人说直接传一个...
  • 有关HTTP的PATCH提交方式

    万次阅读 2018-12-02 18:57:46
    一、关于PATCH Http的【RFC2616】原本定义用于上传数据的方法只有POST和PUT,但是考虑到两者的不足,就增加了PATCH方法。 用PATCH方法,默认是以x-www-form-urlencoded的contentType来发送信息,并且信息内容是...
  • linux patch 命令小结

    万次阅读 2012-04-28 11:12:23
    说到patch命令,就不得不提到diff命令,也就是制作patch的必要工具。diff命令,在制作patch文件的时候,基本上只需要使用到diff -Nau 这个参数,如果比较的是文件夹,还要加上-r参数,所以一般直接使用Naur参数。 ...
  • patch命令

    千次阅读 2019-01-04 00:10:49
    patch命令用于为特定软件包打补丁,diff命令可以生成补丁文件 2、参数选项 Usage: patch [OPTION]... [ORIGFILE [PATCHFILE]] Input options: -p NUM --strip=NUM Strip NUM leading components from file names...
  • patch 命令用法详解

    万次阅读 2010-08-23 00:33:00
    patch,是打补丁的命令,有很多用法,见帮助#man patch patch -p0 (“p”指的是路径,后面的数字表示去掉路径的第几部分。"0",表示不去掉,为全路径) patch -p1 (“p”后面的数字"1",表示去掉前...
  • git 生成patch和使用patch

    万次阅读 多人点赞 2013-04-13 19:53:21
    啰嗦下:发现自己的blog被转载了,不过没有注明出处,有点痛并快乐着的感觉。... 工作中用到的补丁大致可以分为两种,一种是patch文件,即补丁文件拿过来利用某些命令将这个补丁打入当前代码中,另外一种
  • IDEA生成patch和使用patch

    万次阅读 2017-07-20 08:46:57
    工作中用到的补丁大致可以分为两种,一种是patch文件,即补丁文件拿过来利用某些命令将这个补丁打入当前代码中,另外一种是修改前和修改后的文件对比包,这个对比包可以让我们快速查看到修改点的同时看到修改的上...
  • 生成patch文件: svn diff > patchFile // 整个工程的变动生成patch 或svn diff file > patchFile // 某个文件单独变动的patch   svn回滚: svn revert FILE // 单个文件回滚 svn revert DIR --depth=infinity...
  • 如何制作LINUX的patch文件及如何打patch 对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件。 patch文件也叫补丁,就是一个文本文档,这个文档包含了在两个不同...
  • 在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情。 什么是patch?简单来讲,patch中存储的是你对代码的修改 什么是生成patch?生成patch就是记录你对代码的修改并将其...
  • git 生成patch和打patch

    千次阅读 2018-08-29 21:15:24
    有这样的 目录层次 x/... test.patch 在test.patch补丁文件里的路径信息是这样的: - - - a/xx/xxx/xxx  +++b/xx/xxx/xxx  如果 应用 test.patch 的时候的 位置 是在 x/ 下, 那么 执行 patch -p1 &lt; tes...
  • 最近分配了一些打patch的任务。打的那个叫稀巴烂。想必对我很失望。这个过程中学到了如何打patch. 正常来说我们打的git生成的标准patch如果没有没有问题那很好打。 只需要进入patch对应的代码树,然后执行git am $...
  • 1.create patch 使用create patch可以生成一个或者多个修改过的文件和当前版本差异的patch(支持目录树) 通常情况下,create patch将修改保存为.patch或.diff文件 可以将.patch或.diff文件的内容复制出来,发给...
  • 一文看懂PatchGAN

    万次阅读 热门讨论 2019-06-14 11:36:55
    最近看到PatchGAN很是好奇原理是什么,发现网上很多介绍的并不清楚.故墙外墙内来回几次,大概是清楚了. PatchGAN其实指的是GAN的判别器,将判别器换成了全卷积网络. 这么说并不严谨,PatchGAN和普通GAN判别器是...
1 2 3 4 5 ... 20
收藏数 176,571
精华内容 70,628
关键字:

patch