Что делает git rev-parse?
Что делает git rev-parse
?
Я прочитал man-страницу, но он поднял больше вопросов, чем ответов. Такие вещи, как:
Выберите и массаж параметры
Массаж? Что это значит?
Я использую в качестве преобразователя (для SHA1) спецификаторов ревизий, например
git rev-parse HEAD^
или
git rev-parse origin/master
Это назначение команд? Если нет, то даже правильно использовать его для достижения этого?
Ответы
Ответ 1
git rev-parse
является вспомогательной командой plumbing
, используемой в основном для манипуляции.
Одним из распространенных способов использования git rev-parse
является печать хэшей SHA1 с учетом спецификатора ревизии. Кроме того, он имеет различные опции для форматирования этого вывода, например --short
для печати более короткого уникального SHA1.
Существуют и другие варианты использования (в скриптах и других инструментах, построенных поверх git), которые я использовал для:
-
--verify
, чтобы убедиться, что указанный объект является допустимым объектом git.
-
--git-dir
для отображения абс/относительного пути каталога .git
.
- Проверка наличия в репозитории с помощью
--is-inside-git-dir
или внутри рабочего дерева с помощью --is-inside-work-tree
- Проверка того, является ли репо без использования
--is-bare-repository
- Печать хэшей SHA1 ветвей (
--branches
), тегов (--tags
), а refs также можно отфильтровать на основе пульта (с помощью --remote
)
-
--parse-opt
, чтобы нормализовать аргументы в script (вид, аналогичный getopt
), и напечатать выходную строку, которая может использоваться с eval
Massage
просто означает, что можно преобразовать информацию из одной формы в другую, т.е. команду преобразования. Вот некоторые быстрые примеры, которые я могу придумать:
- имя ветки или тега в фиксаторе SHA1 указывает на то, что оно может быть передано команде сантехника, которая принимает только значения SHA1 для фиксации.
- диапазон изменений
A..B
для git log
или git diff
в эквивалентные аргументы для базовой команды сантехники как B ^A
Ответ 2
Чтобы уточнить этимологию имени команды rev-parse
, Git последовательно использует термин rev
в командах сантехники как короткий для "ревизии" и в целом означает 40-символьный хэш SHA1 для фиксации. Команда rev-list
, например, печатает список из 40-х980 хешей фиксации для ветки или что-то еще.
В этом случае имя может быть расширено до parse-a-commitish-to-a-full-SHA1-hash
. Хотя команда имеет несколько вспомогательных функций, упомянутых в ответе Tuxdude, ее тезка, по-видимому, является прецедентом для преобразования удобной для пользователя ссылки, такой как название ветки или сокращенный хеш в однозначный 40-символьный SHA1-хэш, наиболее полезный для многих программ/сантехники целей.
Я знаю, что я думал, что это было "обратное разглашение" чего-то довольно долго, прежде чем я понял это и имел те же проблемы, что и понятия "массаж" и "манипуляция":)
Во всяком случае, я нахожу это понятие "синтаксический анализ" приемлемым, чтобы думать об этом, и надежную концепцию для приведения этой команды в сознание, когда мне это нужно. Часто в сценарии Git вы берете удобную для пользователя ссылку на комманду как пользовательский ввод и обычно хотите, чтобы она была разрешена к проверенной и недвусмысленной рабочей ссылке сразу после ее получения. В противном случае входной перевод и валидация имеют тенденцию распространяться через script.
Ответ 3
git rev-parse
Также работает для получения текущего имени ветки, используя флаг --abbrev-ref, например:
git rev-parse --abbrev-ref HEAD