Что делает 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