[go: up one dir, main page]

українська мова ▾ Topics ▾ Latest version ▾ git-describe last updated in 2.42.0

НАЗВА

git-describe — Надає обʼєкту зрозумілу для людини назву на основі наявного посилання ref

СИНОПСИС

git describe [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>…​]
git describe [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
git describe <blob>

ОПИС

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

Зазвичай (без --all або --tags) git describe показує лише анотовані теги. Для отримання додаткової інформації про створення анотованих тегів дивіться опції -a та -s для git-tag[1].

Якщо вказаний об’єкт посилається на блоб, він описується у форматі <commit-ish>:<path>, тобто цей блоб можна знайти за адресою <path> у <commit-ish>, який, своєю чергою, позначає перший коміт, у якому цей блоб зустрічається при зворотному обході ревізій від HEAD.

ОПЦІЇ

<commit-ish>…​

Назви об’єктів (подібні до комітів), що підлягають опису. Якщо не вказано, зазвичай використовується HEAD.

--dirty[=<mark>]
--broken[=<mark>]

Описує стан робочого дерева. Коли робоче дерево відповідає HEAD, вивід буде таким самим, як "git describe HEAD". Якщо робоче дерево має локальну модифікацію, до нього додається "-dirty". Якщо репозиторій пошкоджений і Git не може визначити, чи є локальна модифікація, Git виведе помилку, якщо не вказано ‘--broken’, що додає суфікс "-broken".

--all

Замість того, щоб використовувати лише теги з анотаціями, використовувати будь-які посилання, що містяться в просторі імен refs/. Ця опція дозволяє порівнювати будь-яку відому гілку, гілку з віддаленим відстеженням або полегшений тег.

--tags

Замість використання лише анотованих тегів, використовувати будь-який тег з простору імен refs/tags. Ця опція вмикає зіставлення з легким (неанотованим) тегом.

--contains

Замість пошуку тегу, який передує коміту, знайти тег, який йде після коміту і, таким чином, містить його. Автоматично передбачає --tags.

--abbrev=<n>

Замість використання стандартної кількості шістнадцяткових цифр (яка змінюватиметься залежно від кількості обʼєктів у репозиторії, стандартно — 7) скороченої назви обʼєкта, використовувати <n> цифр або стільки цифр, скільки потрібно для формування унікальної назви обʼєкта. <n>, що дорівнює 0, пригнічує довгий формат, показуючи лише найближчий тег.

--candidates=<n>

Замість того, щоб розглядати лише 10 найновіших тегів як кандидатів для опису вхідних даних, подібних до комітів, використовувати до <n> кандидатів. Збільшення <n> вище 10 займе трохи більше часу, але може дати точніший результат. <n>, що дорівнює 0, призведе до виведення лише точних збігів.

--exact-match

Виводити лише точні збіги (тег безпосередньо посилається на наданий коміт). Це синонім до --candidates=0.

--debug

Детально відображати інформацію про стратегію пошуку, що використовується, з урахуванням стандартної помилки. Назва тегу все одно буде виведена з урахуванням стандартної помилки.

--long

Завжди виводити повний формат (тег, кількість комітів та скорочену назву коміту), навіть якщо він збігається з тегом. Це корисно, коли ви хочете бачити частини назви об’єкта коміту у виводі команди «describe», навіть якщо відповідний коміт є версією з тегом. Замість того, щоб просто виводити імʼя тегу, він опише такий коміт як v1.2-0-gdeadbee (0-й коміт від тегу v1.2, що вказує на обʼєкт deadbee…​.).

--match <pattern>

Розглядати лише теги, що відповідають заданому шаблону glob(7), за винятком префікса "refs/tags/". Якщо використовується з --all, також враховуються локальні гілки та посилання на віддалене відстеження, що відповідають шаблону, за винятком префіксів "refs/heads/" та "refs/remotes/" відповідно; посилання інших типів ніколи не враховуються. Якщо вказано кілька разів, буде накопичено список шаблонів, і будуть розглянуті теги, що відповідають будь-якому з шаблонів. Використовуйте --no-match, щоб очистити та скинути список шаблонів.

--exclude <pattern>

Не враховувати теги, що відповідають заданому шаблону glob(7), за винятком префікса "refs/tags/". Якщо використовується з --all, також не враховуються локальні гілки та посилання на віддалене відстеження, що відповідають шаблону, за винятком префіксів "refs/heads/" та "refs/remotes/" відповідно; посилання інших типів ніколи не враховуються. Якщо вказано кілька разів, буде накопичено список шаблонів, а теги, що відповідають будь-якому з шаблонів, будуть виключені. У поєднанні з --match тег буде розглянуто, коли він відповідає принаймні одному шаблону --match та не відповідає жодному з шаблонів --exclude. Використовуйте --no-exclude для очищення та скидання списку шаблонів.

--always

Показувати об’єкт коміту з унікальним скороченим іменем як альтернативний варіант.

--first-parent

При виявленні коміту злиття слід враховувати лише перший батьківський коміт. Це корисно, коли ви не хочете зіставляти теги в гілках, злитих в історії цільового коміту.

ПРИКЛАДИ

З чимось на кшталт git.git current tree ви отримаєте:

[torvalds@g5 git]$ git describe parent
v1.0.4-14-g2414721

тобто поточна вершина гілки "parent" базується на версії 1.0.4, але оскільки вона має кілька комітів на додачу до цього, describe додав кількість додаткових комітів ("14") та скорочену назву обʼєкта для самого коміту ("2414721") в кінці.

Кількість додаткових комітів — це кількість комітів, які відображаються командою "git log v1.0.4..parent". Суфікс хешу — це "-g" + однозначне скорочення для кінцевого коміту батьківського репозиторію (яким був 2414721b194453f058079d897d13c4e377f92dc6). Довжина абревіатури змінюється у міру зростання репозиторію, використовуючи приблизну кількість об’єктів у репозиторії та трохи математики навколо парадоксу дня народження, та стандартно становить мінімум 7. Префікс "g" означає "git" і використовується для опису версії програмного забезпечення залежно від SCM, за допомогою якого це програмне забезпечення управляється. Це корисно у середовищі, де люди можуть використовувати різні SCM.

Виконання команди git describe для імені тегу просто покаже назву тегу:

[torvalds@g5 git]$ git describe v1.0.4
v1.0.4

З параметром --all команда може використовувати заголовки гілок як посилання, тому вивід також показує шлях посилання:

[torvalds@g5 git]$ git describe --all --abbrev=4 v1.0.5^2
tags/v1.0.0-21-g975b
[torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^
heads/lt/describe-7-g975b

Якщо для параметра --abbrev встановлено значення 0, команду можна використовувати для пошуку найближчого тегу без будь-якого суфікса:

[torvalds@g5 git]$ git describe --abbrev=0 v1.0.5^2
tags/v1.0.0

Зверніть увагу, що суфікс, який ви отримаєте, якщо введете ці команди сьогодні, може бути довшим, ніж той, що бачив Лінус вище, коли він виконував ці команди, оскільки ваш репозиторій Git може мати нові коміти, імена обʼєктів яких починаються з 975b, яких тоді не існувало, і суфікса "-g975b" може бути недостатньо для усунення неоднозначності цих комітів.

СТРАТЕГІЯ ПОШУКУ

Для кожного вказаного коміту команда git describe спочатку шукатиме тег, який позначає саме цей коміт. Теги з анотаціями завжди матимуть пріоритет над полегшеними тегами, а теги з пізнішою датою — над тегами зі старішою датою. Якщо буде знайдено точний збіг, його назва буде виведена на екран, і пошук припиниться.

Якщо точний збіг не знайдено, git describe перегляне історію комітів, щоб знайти коміт-предок, який було позначено тегом. Тег предка буде виведено разом зі скороченням SHA-1 вхідного коміту. Якщо було вказано --first-parent, тоді під час обходу буде розглянуто лише першого батька кожного коміта.

Якщо під час перегляду було знайдено кілька тегів, то буде вибрано та виведено тег, який має найменшу кількість комітів, відмінних від вхідних. Тут найменша кількість різних комітів визначається як кількість комітів, яка буде показана командою git log tag..input, і це буде найменша можлива кількість комітів.

ПОМИЛКИ

Обʼєкти дерева, а також обʼєкти тегів, які не вказують на коміти, не можуть бути описані. При описі блобів легкі теги, що вказують на блоби, ігноруються, але блоб все одно описується як <commit-ish>:<path>, незважаючи на те, що легкий тег є кращим варіантом.

GIT

Частина набору git[1]