patch diff stuff

翻译 2012年03月23日 18:12:47

The original article is here


Applying A Patch

Applying a 'patch' (output from diff -u) is done with the 'patch' tool inside the Bash Shell (i.e.Cygwin). It is best to put the patch files in the same directory as the source code and will make it easier for you when you have to apply them.

  cd to/source/root
  patch < patchfile

patch knows that the patchfile is a set of changes on one or more files, and will do those to your local files. If your files have changed too much for the patch to work, it will save the sections of the patch that aren't possible to apply in a file called "filename.rej" (filename being the name of the file for which the failing section was intended for). Then you must take care of them manually.

If there is path information in the patchfile that you want to cut off from the left, tell patch how many directory levels to cut off to find the names in your file system:

  patch -p0 < patchfile
  patch -p1 < patchfile
  patch -p2 < patchfile

... each example line removes one extra level of dir info from the left.

You can use the --dry-run option to patch to make sure that the patch applies clean. It doesn't actually apply the patch, only prints what would happen if you run it.



Removing A Patch

You can remove a patch again from the sources by doing the reverse action of a specific patch. You do this with the -R (or --reverse) options, such as:

  patch -p1 -R < patchfile




These tools will assume and operate on "unix-style" newlines. That means all files that you're diffing and patching must have LF newlines only, and not the Windows/DOS standard CRLF newlines.

Do you have a newline problem? You might want to try Dos2unix or unix2dos.

  dos2unix -d filename

To change Dos CRLF to Unix LF newline style.

  dos2unix -u filename

To change Unix LF to Dos CRLF newline style.

both commands will change and save the specific file. You can put an asterisk (*) instead of filename to go through a library, or

  find -exec dos2unix -U {} \;

To run recursively on every subdirectory and file.



Problems with Windows Patch

For some users, the Windows patch program above malfunctions. If patch doesn't output anything, set up a build environment as described on this page.



Creating A Patch

We generate diffs (often called patches) using 'diff' in a manner similar to this:

  diff -u oldfile newfile > patch

People who have checked out code with SVN can do diffs using svn like this:

  svn diff file > patch

'diff' can also be used on a whole directory etc to generate one file with changes done to multiple:

  diff -u -r olddir newdir > patch

The -u option means the output is using the 'unified diff' format. Older diff programs don't have that, and then -c (for 'context diff') is OK.

The -r option recursively runs diff command on every subdirectory and file.

Include New Files

Newly created files can be included with the help of 'svn add'.

First add the files like this:

  svn add file

after adding the files they can be included in the patch:

  svn diff [files] > patch


diff-match-patch 各平台源码

  • 2017年10月27日 16:16
  • 1.09MB
  • 下载

linux diff &amp; patch

  • 2016年03月17日 17:35
  • 457KB
  • 下载

关于binary diff / patch 差分补丁工具的那些事

差异工具 差异工具,其实就是·····有点难解释,看下面吧,相信你很快就懂了。 这个工具叫做binary diff / patch 顾名思义大概就是二进制比较和打补丁 看那个下划线就知道这个工...


  • 2017年05月04日 14:55
  • 19KB
  • 下载

armboot-org2mini2440.diff patch补丁包

  • 2011年05月25日 13:27
  • 183KB
  • 下载

diff && patch 命令制作补丁

diff 命令diff可以比较两个文件,并可同时记录下二者的区别。制作补丁时的一般用法和常见选项为: diff 【选项】 源文件(夹) 目的文件(夹) -r:递归,设置后diff会将两个不同...


  • 2014年02月10日 00:26
  • 226B
  • 下载


文件比较 所谓的文件比较,一般设计四个领域 1.检查两个文件是否相同,如果不同,找不哪里不同 2.应用两个文件的不同之处,使从其中一个回复另外一个 3.使用校验和找出相同一致的文件 4.使用...

apache22.diff mod_auth_mysql patch

  • 2010年03月30日 16:25
  • 6KB
  • 下载
您举报文章:patch diff stuff