Що робить git rev-синтаксичний аналіз?


282

Що робить git rev-parse?

Я прочитав сторінку man, але це викликало більше питань, ніж відповідей. Такі речі:

Підбирайте і масажуйте параметри

Масаж ? Що це означає?

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

git rev-parse HEAD^

або

git rev-parse origin/master

Це мета команди? Якщо ні, то навіть правильно використовувати його для досягнення цього?


3
Наскільки я бачу на сторінці man, це в основному внутрішня утиліта для розбору імен редакції / об'єктів для інших команд. Те, що ви робите, в значній мірі є метою rev-parseкоманди. Ви також можете використовувати його для нормалізації командного рядка, так що фактична програма не повинна розуміти складний синтаксис імені об'єкта Git (ви б використовували git rev-parseдля зміни або "масажу" певні параметри в командному рядку перед фактична програма називається).

Дивіться також github.com/git/git/commit/…
VonC

60
Сторінка людини для git rev-parseсміху незрозуміла. Я здивований, що ніхто не переймався переписати цей жаргон на щось читабельне навіть через 5 років.
not2qubit

@ not2qubit Мені: "Дякую за уточнення, я відчував себе неповноцінним". Лінус Торвальдс: "Я перечитав це саме, яку частину ви не зрозуміли?"
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

102

Щойно для детальної розробки етимології імені команди rev-parse, Git послідовно використовує цей термін revу сантехнічних командах як короткий для "перегляду" і загалом означає хеш SHA1 40 символів для фіксації. Команда, rev-listнаприклад, друкує список 40-знакових хешів комірок для гілки чи іншого.

У цьому випадку ім'я може бути розширено до parse-a-commitish-to-a-full-SHA1-hash. Хоча команда має декілька допоміжних функцій, згаданих у відповіді Туксдуда, її тезка, схоже, є випадком використання для перетворення зручної посилання, наприклад, назви гілки або скороченого хешу, в однозначний хеш-код SHA1 40 символів, найбільш корисний для багатьох програмування / сантехніки цілей.

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

У будь-якому разі, я вважаю це поняття "розбір до перегляду" задовольняючим способом його думати, і надійною концепцією приведення цієї думки до уваги, коли мені потрібна така річ. Часто під час написання сценарію Git ви користуєтеся зручним користувачем посиланням на фіксацію як вхід користувача і, як правило, хочете, щоб це було вирішено до перевіреної та однозначної робочої посилання якнайшвидше після отримання його. В іншому випадку трансляція та валідація вводу мають тенденцію до поширення через сценарій.


9
Дякую за пояснення, я ніколи не зрозумів git-docs: git-scm.com/docs/git-rev-parse
Jacob McKay

ви можете навести нам приклад messagingі manipulationяк ви нагадали раніше?
Бо Чен

5
Іншими словами, git rev-parseце коротко git revision-parse. Він бере даний вхід і повертає відповідний ідентифікатор редакції 40 символів.
Джонатан Бенн

36

git rev-parseТакож працює для отримання поточної назви гілки за допомогою прапора --abbrev-ref, наприклад:

git rev-parse --abbrev-ref HEAD

Чи можливо отримати повідомлення про фіксацію таким чином?
Лев Дродікодер

2
Спробуйте @LeoDroidcodergit log --format=%B -n 1 <revision>
hipyhop
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.