How to create patch file using patch and diff

November 23rd, 2006 mysurface Posted in Developer, diff, Misc, patch | Hits: 334989 | 15 Comments »

Okay, this is what I do. I only know the basic. But before doing this, please backup your source code, patch wrongly will screwup your source code.

First, how to create patch file?
Patch file is a readable file that created by diff with -c (context output format). It doesn’t matter and if you wanna know more, man diff. To patch the entire folder of source codes(as usually people do)I do as bellow:

Assume Original source code at folder Tb01, and latest source code at folder Tb02. And there have multiple sub directories at Tb01 and Tb02 too.

diff -crB Tb01 Tb02 > Tb02.patch

-c context, -r recursive (multiple levels dir), -B is to ignore Blank Lines.
I put -B because blank lines is really useless for patching, sometimes I need to manually read the patch file to track the changes, without -B is really headache.

How to patch?
First of all, please do a dry-run before really patch it. Bare in mind, patch will be working very specifically. Let say the version 3 Tb03.patch is use to patch from Tb02, if you apply patch on Tb01, sometimes it will corrupt your source code. So, to make sure it works, do a dry run. Dry-run means a fake-test, do it at the directory of the source code targeted to patch.

Doing dry-run like this:

patch --dry-run -p1 -i Tb02.patch

The success output looks like this:

patching file TbApi.cpp
patching file TbApi.h
patching file TbCard.cpp
...

The failure ouptut looks like this:

patching file TbCard.cpp
Hunk #2 FAILED at 585.
1 out of 2 hunks FAILED -- saving rejects to file TbCard.cpp.rej
patching file TbCard.h
Hunk #1 FAILED at 57.
Hunk #2 FAILED at 77.
Hunk #3 succeeded at 83 with fuzz 1 (offset -21 lines).
....

At last, if the dry-run is giving good result, do this and enjoy the compilation.

patch -p1 -i Tb02.patch

References:
1. Network Theory Ltd Patch Intro
2. How to create and use a patch in Linux

15 Responses to “How to create patch file using patch and diff”

  1. [...] Refers to How to create patch file using patch and diff, you can actually read the diff file to compare the different between files. But what if you wanna compare and edit simultaneously manually? [...]

  2. Useful example, thanks. There are two things I would add – first, before running patch, cd into the new directory (the one to be patched). That’s how the command knows which tree to modify.

    diff -crB Tb01 Tb02 > Tb02.patch
    cp -r Tb01 Tb03
    cd Tb03
    patch –dry-run -p1 -i ../Tb02.patch

    Second, if there were files in Tb02 that did not exist in Tb01 and you want them included in the patch, give diff the -N option:

    diff -crBN Tb01 Tb02 > Tb02.patch

    Lastly, I’d note that diff and patch really only work with text files. It can’t deal with jpegs, pdfs, or other binary objects. This can be a bit of a pain for web and GUI developers.

  3. thanks for exemple,

    mumblyjoe Says: There are two things I would add – first, before running patch, cd into the new directory (the one to be patched)

    thanks for adding.

  4. Hi..it is really a valuable information. I would like to know, will the patch command create a directory?
    or do we have an option for creating a directory?

  5. The examlpe is very clear and is very helpful.

    Thank you!

  6. thank you!very useful!

  7. Thanks for useful tutorial…

  8. Good stuff really liked this :)

  9. great points altogether, you just received emblem reader. What may you recommend in regards to your post that you just made some days ago? Any positive?

  10. good example

  11. [...] try to make a patch as introduced here. Say I have two directories pp1(modified version) and pp0(clean version), I make a patch file [...]

  12. I like:
    diff -u
    it is nicer :-)

  13. [...] read here can help make one better than what EXE can do. To create your own patch file learn it from here. There is no way M$ can beat gnu/linux/*nix/bsd on matters like this one simple lipstick painting. [...]

  14. Perfect and simple
    Thank you

  15. [...] How to create patch file using patch and diff [...]

Leave a Reply