# The Ten Minute Guide to diff and patch

The original article is here

http://jungels.net/articles/diff-patch-ten-minutes.html

# The Ten Minute Guide to diff and patch

Situation one: you are trying to compile a package from source and you discover that somebody has already done the work for you of modifying it slightly to compile on your system. They have made their work available as a "patch", but you're not sure how to make use of it. The answer is that you apply the patch to the original source code with a command line tool called, appropriately, patch.

Situation two: you have downloaded the source code to an open source package and after an hour or so of minor edits, you manage to make it compile on your system. You would like to make your work available to other programmers, or to the authors of the package, without redistributing the entire modified package. Now you are in a situation where you need to create a patch of your own, and the tool you need is diff.

This is a quick guide to diff and patch which will help you in these situations by describing the tools as they are most commonly used. It tells you enough to get started right away. Later, you can learn the ins and outs of diff and patch at your leisure, using the man pages.

## Applying patches with patch

To apply a patch to a single file, change to the directory where the file is located and call patch:

patch < foo.patch


These instructions assume the patch is distributed in unified format, which identifies the file the patch should be applied to. If not, you can specify the file on the command line:

patch foo.txt < bar.patch


Applying patches to entire directories (perhaps the more common case) is similar, but you have to be careful about setting a "p level". What this means is that, within patch files, the files to be patched are identified by path names which may be different now that the files are located on your computer rather than on the computer where the patch was created. The p level instructs patch to ignore parts of the path name so that it can identify the files correctly. Most often a p level of one will work, so you use:

patch -p1 < baz.patch


You should change to the top level source directory before running this command. If a patch level of one does not correctly identify any files to patch, inspect the patch file for file names. If you see a name like

/users/stephen/package/src/net/http.c


and you are working in a directory that contains net/http.c, use

patch -p5 < baz.patch


In general, count up one for each path separator (slash character) that you remove from the beginning of the path, until what's left is a path that exists in your working directory. The count you reach is the p level.

To remove a patch, use the -R flag, ie

patch -p5 -R < baz.patch


## Creating patches with diff

Using diff is simple whether you are working with single files or entire source directories. To create a patch for a single file, use the form:

diff -u original.c new.c > original.patch


To create a patch for an entire source tree, make a copy of the tree:

cp -R original new


Make any changes required in the directory new/. Then create a patch with the following command:

diff -rupN original/ new/ > original.patch


That's all you need to get started with diff and patch. For more information use:

man diff
man patch


• 本文已收录于以下专栏：

## Linear and Logic Five Minute Guide (Rev. B)

• 2012-09-24 16:27
• 4.34MB
• 下载

## How to apply a patch/diff and solve “hunk FAILED”, “can’t find file to patch” and others

Hi  After you read this article, you’ll be able to apply patch files/diffs and deal with possible e...

## Linux系统补丁工具patch AND diff

Linux系统补丁工具patch AND diff 一、工具概述： diff制作补丁的工具 diff后面可以接两个文件名或两个目录名生成补丁 patch打补丁的工具 Patch用途：根据...

## Introduction: Using diff and patch (tutorial)

zz Introduction: Using diff and patch (tutorial) The commands diff and patch form a powerful c...

## diff and patch

http://www.ibm.com/developerworks/cn/linux/l-diffp/ 在Unix系统下，维护源码版本可以使用很多方法，其中最常用的当然是大名鼎鼎的CVS，但实际上，简...

## A simple guide to 9-patch for Android UI

[转] http://radleymarx.com/blog/simple-guide-to-9-patch/ While I was working on my first And...

## The Scientist and Engineer's Guide to Digital Signal Processing

The Scientist and Engineer's Guide to Digital Signal Processing By Steven W. Smith, Ph.D. http://...
• eein
• 2011-11-02 03:52
• 589

## Busy Developers' Guide to HSSF and XSSF Features

http://poi.apache.org/spreadsheet/quick-guide.html#Validation Busy Developers' Guide to Feature...

## A Guide to Blocks & Grand Central Dispatch (and the Cocoa API's making use of them)

Intro As you may or may not know I recently did a talk at the Des Moines Cocoaheads in which I revie...

举报原因： 您举报文章：深度学习：神经网络中的前向传播和反向传播算法推导 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)