Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.54.0
2026-04-20
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.51.2 no changes
-
2.51.1
2025-10-15
- 2.39.1 → 2.51.0 no changes
-
2.39.0
2022-12-12
- 2.15.4 → 2.38.5 no changes
- 2.14.6 no changes
- 2.7.6 → 2.13.7 no changes
-
2.6.7
2017-05-05
- 2.2.3 → 2.5.6 no changes
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
ОПИС
Читає латки зі стандартного вводу та обчислює ідентифікатори латок.
«Ідентифікатор патча» — це не що інше, як сума SHA-1 відмінностей файлів, пов’язаних із патчем, при цьому номери рядків ігноруються. Таким чином, він є «достатньо стабільним», але водночас і досить унікальним, тобто два патчі з однаковим «ідентифікатором патча» майже гарантовано є одним і тим самим.
Основне використання цієї команди — пошук ймовірних дублікатів комітів.
При роботі з результатами команди git diff-tree --patch використовується той факт, що перед латкою стоїть імʼя обʼєкта коміту, і виводиться два 40-байтових шістнадцяткових рядки. Перший рядок — це ідентифікатор латки, а другий — ідентифікатор коміту. Це можна використовувати для створення відповідності між ідентифікаторами латок та комітів для набору або діапазону комітів.
ОПЦІЇ
-
--verbatim -
Обчислити ідентифікатор латки вхідних даних у тому вигляді, в якому вони надані, не видаляючи пробілів. Передбачає використання опції
--stableта забороняє використання опції--unstable.Це значення за замовчуванням, якщо
patchid.verbatimмає значенняtrue. -
--stable -
Використовуйте «стабільну» суму хешів як ідентифікатор патча. З цією опцією:
-
Зміна порядку файлів diff, що складають латку, не впливає на її ідентифікатор. Зокрема, дві латки, отримані в результаті порівняння одних і тих самих двох дерев із двома різними налаштуваннями параметра
-O<orderfile>, мають однаковий ідентифікатор латки, що дозволяє використовувати цей обчислений результат як ключ для індексації певної метаінформації про зміни між цими двома деревами. -
Результат відрізняється від значення, яке видає Git 1.9 та старіші версії, або яке отримується при налаштуванні «нестабільного» хешу (див.
--unstableнижче) — навіть при використанні з результатами порівняння, отриманими без застосування-O<orderfile>, що робить наявні бази даних, які зберігають такі «нестабільні» або історичні ідентифікатори латок, непридатними для використання. -
Усі пробіли всередині латки ігноруються та не впливають на ідентифікатор.
Це значення за замовчуванням, якщо для
patchid.stableвстановлено значенняtrue. -
-
--unstable -
Використовувати «нестабільний» хеш як ідентифікатор латки. При використанні цієї опції отриманий результат сумісний із значенням ідентифікатора латки, що генерується Git 1.9 та старішими версіями, при цьому пробіли ігноруються. Цю опцію можуть використовувати користувачі, які мають бази даних, що містять ідентифікатори латок, згенеровані Git 1.9 та старішими версіями (і які не працюють із переупорядкованими латками).
Це значення за замовчуванням.
ПРИКЛАДИ
git-cherry[1] показує, які коміти з вашої гілки мають коміти з відповідними ідентифікаторами латок у деяких гілках вищого рівня. Однак ця команда лише повідомляє, чи існує такий коміт. А що, якщо вам потрібно дізнатися, які саме коміти є відповідними у гілці вищого рівня? Ми можемо скористатися цією командою, щоб створити відповідність між вашою гілкою та гілкою вищого рівня:
#!/bin/sh
upstream="$1"
branch="$2"
test -z "$branch" && branch=HEAD
limit="$3"
if test -n "$limit"
then
tail_opts="$limit".."$upstream"
else
since=$(git log --format=%aI "$upstream".."$branch" | tail -1)
tail_opts=--since="$since"' '"$upstream"
fi
for_branch=$(mktemp)
for_upstream=$(mktemp)
git rev-list --no-merges "$upstream".."$branch" |
git diff-tree --patch --stdin |
git patch-id --stable | sort >"$for_branch"
git rev-list --no-merges $tail_opts |
git diff-tree --patch --stdin |
git patch-id --stable | sort >"$for_upstream"
join -a1 "$for_branch" "$for_upstream" | cut -d' ' -f2,3
rm "$for_branch"
rm "$for_upstream"
Тепер у першому стовпці показується коміт із вашої гілки, а в другому — коміт, що відповідає ідентифікатору латки, якщо такий існує.
GIT
Частина набору git[1]