Что делает git name-rev? - PullRequest
       1

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

0 голосов
/ 05 октября 2018

В соответствии с git name-rev doc ,

Находит символические имена, пригодные для пищеварения для ревизий, представленных в любом формате, который может быть обработан git rev-parse.

Но я не мог этого понять.Какая польза от этой команды?Чем он отличается от команды git description ?Я думаю, что оба также делают то же самое - дать идентификатор SHA1, возвращает ли нам ближайшее имя ссылки на него?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Ответ Марека R правильный, но немного неполный.

По сути, git name-rev предлагает имя плюс некоторое относительное выражение, если необходимо, чтобы перейти от имени ккоммит, в то время как git describe предлагает какое-то имя - обычно имя тега, но, возможно, какое-то другое имя - плюс некоторую дополнительную строку, если необходимо, это не особенно «относительно»: в некоторых случаях есть счетчик, но это не такполезно в качестве числа (й) в git name-rev.Если git describe не удалось использовать необработанное имя, оно добавляет g и сокращенный идентификатор хеша:

$ git describe
v2.19.1-272-gf84b9b09d4

, но:

$ git name-rev HEAD
HEAD master

Если мы добавим --allк аргументам git describe, git describe действительно использует имя ветви, но вывод отличается:

$ git describe --all
heads/master

В частности, было осторожно заметить, что он использовал имя ветви, так как если естьколлизия между именами ветвей и тегов - если есть и refs/tags/master - только при синтаксическом анализе master будет получен хеш-идентификатор, связанный с тегом, а не имя ветви.

Помимо них, git describe может добавить -dirty, если рабочее дерево не соответствует коммиту, и - начиная с Git 2.16.0 - может создать строку name:pathname, чтобы дать вам выражение, которое присваивает имя конкретному хранимому BLOB-объекту:

$ git describe HEAD:Makefile
v2.19.0-237-ge3d4ff037d:Makefile

, что не то, чем git name-rev может управлять.

Цели разные

Какая польза от [git name-rev]?

Я никогда не видел, чтобы кто-нибудь использовал его сам, но смотри ниже.Давайте начнем с того, что git describe: git describe используется очень часто для создания полезных описаний конкретной сборки.Поскольку он по умолчанию использует только теги , его вывод относительно стабилен (хорошо, если мы предположим, что теги никогда не изменятся).Когда git describe говорит v2.19.1-272-gf84b9b09d4, мы знаем:

  • фиксация происходит через некоторое время после v2.19.1
  • фактический хэш-идентификатор фиксации начинается с f84b9b09d4
0 голосов
/ 05 октября 2018

Документация вполне понятна.

Находит / генерирует выражение, которое будет ссылаться на данный коммит, используя только читаемые человеком символы, такие как имена веток и имена тегов.

Например, в моем репозитории:

$ git name-rev 91faf1b82d2dcedf8098a6e571ef379b29a44f51
91faf1b82d2dcedf8098a6e571ef379b29a44f51 develop^2~2

Я предоставил коммит, который не помечен или не указан напрямую ветвью.Как видите, команда обнаружила, что этот коммит содержится в ветке develop.Чтобы достичь этого коммита от develop, вам нужно использовать второго родителя и два коммита назад.

Я рекомендую: просто попробуйте использовать эту команду при разных коммитах и ​​посмотрите результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...