| '\" t |
| .\" Title: git-patch-id |
| .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] |
| .\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/> |
| .\" Date: 11/18/2018 |
| .\" Manual: Git Manual |
| .\" Source: Git 2.20.0.rc0 |
| .\" Language: English |
| .\" |
| .TH "GIT\-PATCH\-ID" "1" "11/18/2018" "Git 2\&.20\&.0\&.rc0" "Git Manual" |
| .\" ----------------------------------------------------------------- |
| .\" * Define some portability stuff |
| .\" ----------------------------------------------------------------- |
| .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| .\" http://bugs.debian.org/507673 |
| .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html |
| .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| .ie \n(.g .ds Aq \(aq |
| .el .ds Aq ' |
| .\" ----------------------------------------------------------------- |
| .\" * set default formatting |
| .\" ----------------------------------------------------------------- |
| .\" disable hyphenation |
| .nh |
| .\" disable justification (adjust text to left margin only) |
| .ad l |
| .\" ----------------------------------------------------------------- |
| .\" * MAIN CONTENT STARTS HERE * |
| .\" ----------------------------------------------------------------- |
| .SH "NAME" |
| git-patch-id \- Compute unique ID for a patch |
| .SH "SYNOPSIS" |
| .sp |
| .nf |
| \fIgit patch\-id\fR [\-\-stable | \-\-unstable] |
| .fi |
| .sp |
| .SH "DESCRIPTION" |
| .sp |
| Read a patch from the standard input and compute the patch ID for it\&. |
| .sp |
| A "patch ID" is nothing but a sum of SHA\-1 of the file diffs associated with a patch, with whitespace and line numbers ignored\&. As such, it\(cqs "reasonably stable", but at the same time also reasonably unique, i\&.e\&., two patches that have the same "patch ID" are almost guaranteed to be the same thing\&. |
| .sp |
| IOW, you can use this thing to look for likely duplicate commits\&. |
| .sp |
| When dealing with \fIgit diff\-tree\fR output, it takes advantage of the fact that the patch is prefixed with the object name of the commit, and outputs two 40\-byte hexadecimal strings\&. The first string is the patch ID, and the second string is the commit ID\&. This can be used to make a mapping from patch ID to commit ID\&. |
| .SH "OPTIONS" |
| .PP |
| \-\-stable |
| .RS 4 |
| Use a "stable" sum of hashes as the patch ID\&. With this option: |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| Reordering file diffs that make up a patch does not affect the ID\&. In particular, two patches produced by comparing the same two trees with two different settings for "\-O<orderfile>" result in the same patch ID signature, thereby allowing the computed result to be used as a key to index some meta\-information about the change between the two trees; |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| Result is different from the value produced by git 1\&.9 and older or produced when an "unstable" hash (see \-\-unstable below) is configured \- even when used on a diff output taken without any use of "\-O<orderfile>", thereby making existing databases storing such "unstable" or historical patch\-ids unusable\&. |
| .sp |
| .if n \{\ |
| .RS 4 |
| .\} |
| .nf |
| This is the default if patchid\&.stable is set to true\&. |
| .fi |
| .if n \{\ |
| .RE |
| .\} |
| .RE |
| .RE |
| .PP |
| \-\-unstable |
| .RS 4 |
| Use an "unstable" hash as the patch ID\&. With this option, the result produced is compatible with the patch\-id value produced by git 1\&.9 and older\&. Users with pre\-existing databases storing patch\-ids produced by git 1\&.9 and older (who do not deal with reordered patches) may want to use this option\&. |
| .sp |
| .if n \{\ |
| .RS 4 |
| .\} |
| .nf |
| This is the default\&. |
| .fi |
| .if n \{\ |
| .RE |
| .\} |
| .RE |
| .SH "GIT" |
| .sp |
| Part of the \fBgit\fR(1) suite |