Русский ▾ Topics ▾ Latest version ▾ git-patch-id last updated in 2.54.0

НАЗВАНИЕ

git-patch-id - Вычисление уникальных идентификаторов для изменений (патчей)

ОБЗОР

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

ОПИСАНИЕ

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

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

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

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

ПАРАМЕТРЫ

--verbatim

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

Это значение по умолчанию, если patchid.verbatim равен true.

--stable

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

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

  • Результат отличается от значения, созданного Git 1.9 и старше, или созданного, когда настроен "нестабильный" хеш (см. --unstable ниже), — даже при использовании на выводе сравнения, полученном без использования -O<файл-порядка>, что делает существующие базы данных, хранящие такие "нестабильные" или исторические идентификаторы патчей, непригодными для использования.

  • Все пробелы внутри патча игнорируются и не влияют на идентификатор.

Это значение по умолчанию, если patchid.stable установлен в true.

--unstable

Использовать «нестабильный» хеш в качестве идентификатора патча. С этим параметром создаваемый результат совместим со значением идентификатора патча, созданным Git 1.9 и старше, и пробелы игнорируются. Пользователи с существующими базами данных, хранящими идентификаторы патчей, созданные Git 1.9 и старше (которые не работают с переупорядоченными патчами), могут захотеть использовать этот параметр.

Это значение по умолчанию.

ПРИМЕРЫ

git-cherry[1] показывает, какие коммиты из ветки имеют эквивалентные коммиты по идентификатору патча в некоторой вышестоящей ветке. Но он только говорит вам, существует ли такой коммит или нет. Что, если вы хотите узнать соответствующие коммиты в вышестоящей ветке? Мы можем использовать эту команду для создания сопоставления между вашей веткой и вышестоящей веткой:

#!/bin/sh

вышестоящая="$1"
ветка="$2"
test -z "$ветка" && ветка=HEAD
предел="$3"
if test -n "$предел"
then
    параметры_хвоста="$предел".."$вышестоящая"
else
    since=$(git log --format=%aI "$вышестоящая".."$ветка" | tail -1)
    параметры_хвоста=--since="$since"' '"$вышестоящая"
fi
for_ветка=$(mktemp)
for_вышестоящая=$(mktemp)

git rev-list --no-merges "$вышестоящая".."$ветка" |
    git diff-tree --patch --stdin |
    git patch-id  --stable | sort >"$for_ветка"
git rev-list --no-merges $параметры_хвоста |
    git diff-tree --patch --stdin |
    git patch-id  --stable | sort >"$for_вышестоящая"
join -a1 "$for_ветка" "$for_вышестоящая" | cut -d' ' -f2,3
rm "$for_ветка"
rm "$for_вышестоящая"

Теперь первый столбец показывает коммит из вашей ветки, а второй столбец показывает эквивалентный коммит по идентификатору патча, если он существует.

СМ. ТАКЖЕ

GIT

Является частью пакета git[1]