Что делает git rev-parse?

285

Что делает git rev-parse?

Я прочитал справочную страницу, но это вызвало больше вопросов, чем ответов. Вещи как:

Выбрать и параметры массажа

Массаж ? Что это значит?

Я использую в качестве резольвера (для SHA1) спецификаторов ревизии, как

git rev-parse HEAD^

или

git rev-parse origin/master

Это цель команды? Если нет, то даже правильно ли использовать его для достижения этой цели?

talles
источник
3
Насколько я вижу на странице руководства, это в основном внутренняя утилита для анализа имен ревизий / объектов для других команд. То, что вы делаете, в значительной степени является целью rev-parseкоманды. Вы также можете использовать его для нормализации командной строки, чтобы реальной программе не приходилось понимать сложный синтаксис имени объекта Git (вы могли бы использовать git rev-parseдля изменения или «массажа» определенные параметры в командной строке перед актуальная программа называется).
См. Также github.com/git/git/commit/…
VonC
60
Справочная страница по git rev-parseсмехотворно непостижима. Я удивлен, что никто не удосужился переписать этот жаргон на что-то понятное человеку, даже после 5 лет.
not2qubit
@ not2qubit Me: «Спасибо за разъяснения, я чувствовал себя хуже». Линус Торвальдс: «Я перечитал, какую именно часть ты не понял?»
Brain2000

Ответы:

245

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) и ссылок также может быть отфильтрована на основе удаленного (с использованием --remote)
  • --parse-optнормализовать аргументы в скрипте (вроде как getopt) и вывести строку вывода, которую можно использовать сeval

Massageпросто подразумевает, что можно преобразовать информацию из одной формы в другую, то есть команду преобразования. Вот несколько быстрых примеров, о которых я могу подумать:

  • имя ветви или тега в SHA1 коммита, на которое он указывает, чтобы его можно было передать сантехнической команде, которая принимает только значения SHA1 для коммита.
  • диапазон ревизий A..Bдля git logили git diffв эквивалентных аргументах для базовой сантехнической команды какB ^A
Tuxdude
источник
102

Просто для того, чтобы уточнить этимологию имени команды rev-parse, Git последовательно использует термин revв сантехнических командах как сокращение от «revision» и обычно означает 40-символьный хэш SHA1 для фиксации. Команда, rev-listнапример, печатает список хешей фиксации из 40 символов для ветви или чего-либо еще.

В этом случае имя может быть расширено до parse-a-commitish-to-a-full-SHA1-hash. В то время как команда имеет несколько вспомогательных функций, упомянутых в ответе Tuxdude, ее тезка, по-видимому, является прецедентом преобразования удобной для пользователя ссылки, такой как имя ветви или сокращенный хеш, в однозначный 40-символьный хеш SHA1, наиболее полезный для многих программ / сантехники. цели.

Я знаю, что думал, что это было "обратным анализом" чего-то довольно долгое время, прежде чем я понял это и испытал те же проблемы с пониманием терминов "массаж" и "манипуляция" :)

Во всяком случае, я нахожу это понятие «анализ-пересмотр» удовлетворительным образом обдумать это и надежной концепцией доведения этой команды до ума, когда мне нужны такие вещи. Часто в сценариях Git вы принимаете удобную для пользователя ссылку на коммит в качестве пользовательского ввода и обычно хотите, чтобы она была преобразована в проверенную и однозначную рабочую ссылку как можно скорее после ее получения. В противном случае входной перевод и проверка имеют тенденцию распространяться через сценарий.

scanny
источник
9
Спасибо за объяснение, я немного не понял git-docs: git-scm.com/docs/git-rev-parse
Джейкоб Маккей,
Можете ли вы дать нам пример messagingи manipulationкак вы намекаете раньше?
Бо Чен
5
Другими словами, git rev-parseэто сокращение от git revision-parse. Он принимает данные и возвращает соответствующий 40-значный идентификатор редакции.
Джонатан Бенн
36

git rev-parseТакже работает для получения текущего имени ветки с помощью флага --abbrev-ref, например:

git rev-parse --abbrev-ref HEAD
митра
источник
Возможно ли получить сообщение о коммите таким образом?
Лев Droidcoder
2
@LeoDroidcoder попробуйgit log --format=%B -n 1 <revision>
хипхоп