Spec-Zone.ru › Git

git-patch-id

Название

git-patch-id — вычисление уникальных идентификаторов патчей

Краткое описание

git patch-id [--stable | --unstable | --verbatim]

Описание

Читает патчи из стандартного ввода и вычисляет идентификаторы патчей.

«Идентификатор патча» — это не что иное, как сумма SHA-1 различий файлов, связанных с патчем, без учёта номеров строк. Поэтому он «достаточно стабилен», но в то же время и достаточно уникален: два патча с одинаковым «идентификатором патча» почти наверняка совпадают.

Основное применение этой команды — поиск вероятных дубликатов коммитов.

При работе с выводом git diff-tree --patch команда использует тот факт, что перед патчем указано имя объекта коммита, и выводит две 40-байтовые шестнадцатеричные строки. Первая строка — это идентификатор патча, а вторая — идентификатор коммита. Это можно использовать для создания соответствия между идентификаторами патчей и идентификаторами коммитов для набора или диапазона коммитов.

Параметры

--verbatim

Вычислять идентификатор патча для входных данных в исходном виде, не удаляя пробелы. Подразумевает --stable и запрещает --unstable.

Используется по умолчанию, если для patchid.verbatim задано значение true.

--stable

Использовать «стабильную» сумму хешей в качестве идентификатора патча. При использовании этого параметра:

  • Изменение порядка различий файлов, составляющих патч, не влияет на идентификатор. В частности, два патча, созданные путём сравнения одних и тех же двух деревьев с разными настройками -O<orderfile>, дают одинаковую сигнатуру идентификатора патча, поэтому вычисленный результат можно использовать как ключ для индексации метаданных об изменениях между этими двумя деревьями.

  • Результат отличается от значения, полученного в Git 1.9 и более ранних версиях или при настройке «нестабильного» хеша (см. --unstable ниже), даже если он применяется к выводу diff, полученному без использования -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-cherry[1]

patch-id

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-patch-id

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API