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

НАЗВА

git — Безглуздий інструмент для відстеження змін

СИНОПСИС

git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
    [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
    [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
    [--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
    [--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
    <command> [<args>]

ОПИС

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

Дивіться gittutorial[7] для початку, а потім перегляньте giteveryday[7] для корисного мінімального набору команд. Посібник користувача Git містить більш детальний вступ.

Після того, як ви опануєте основні концепції, ви можете повернутися на цю сторінку, щоб дізнатися, які команди пропонує Git. Ви можете дізнатися більше про окремі команди Git за допомогою команди "git help". Сторінка довідки gitcli[7] містить огляд синтаксису команд командного рядка.

Відформатовану копію останньої документації Git з гіперпосиланнями можна переглянути за адресою https://git.github.io/htmldocs/git.html або https://git-scm.com/docs.

ОПЦІЇ

-v
--version

Виводить версію пакунка Git, з якого походить програма «git».

Цей параметр внутрішньо перетворюється на git version ... та приймає ті ж параметри, що й команда git-version[1]. Якщо також вказано --help, він має пріоритет над --version.

-h
--help

Друкує короткий опис та список найчастіше використовуваних команд. Якщо вказано опцію --all або -a, то друкуються всі доступні команди. Якщо названо команду Git, ця опція відкриє сторінку довідки для цієї команди.

Доступні інші опції для керування показу сторінки довідки. Див. git-help[1] для отримання додаткової інформації, оскільки git --help ... внутрішньо перетворюється на git help ....

-C <path>

Виконати так, ніби git було запущено в теці <шлях>, а не в поточній робочій теці. Якщо вказано кілька опцій -C, кожна наступна неабсолютна опція -C <шлях> інтерпретується відносно попередньої опції -C <шлях>. Якщо “<шлях>” вказано, але він порожній, наприклад -C "", поточна робоча тека залишається без змін.

Ця опція впливає на опції, які очікують вказання шляху, такі як --git-dir та --work-tree, у тому сенсі, що інтерпретація вказаних шляхів відбуватиметься відносно робочої теки, визначеної опцією -C. Наприклад, такі виклики є еквівалентними:

git --git-dir=a.git --work-tree=b -C c status
git --git-dir=c/a.git --work-tree=c/b status
-c <name>=<value>

Передайте команді параметр конфігурації. Надане значення замінить значення з файлів конфігурації. Очікується, що <name> буде у тому ж форматі, що й у git config (ключі, розділені крапками).

Зверніть увагу, що пропуск символу = у git -c foo.bar ... дозволений, і це встановлює foo.bar у логічне значення true (як і [foo]bar у конфігураційному файлі). Включення символу =, але з порожнім значенням (наприклад, git -c foo.bar= ...), встановлює foo.bar у порожній рядок, який git config --type=bool перетворить на false.

--config-env=<name>=<envvar>

Подібно до -c <name>=<value>, це присвоює значення змінній конфігурації <name>, де <envvar> — це імʼя змінної середовища, з якої слід отримати значення. На відміну від `-c, тут немає скороченого способу для прямого присвоєння значенням порожнього рядка; натомість сама змінна середовища повинна бути встановлена як порожній рядок. Якщо <envvar> не існує в середовищі, це призведе до помилки. <envvar> не може містити знак рівності, щоб уникнути неоднозначності з <name>, що містить такий знак.

Це корисно у випадках, коли ви хочете передати тимчасові параметри конфігурації до git, але робите це в операційних системах, де інші процеси можуть читати ваш командний рядок (наприклад, /proc/self/cmdline), але не ваше середовище (наприклад, /proc/self/environ). Така поведінка є типовою в Linux, але може не бути такою у вашій системі.

Зверніть увагу, що це може додати безпеку для таких змінних, як http.extraHeader, де конфіденційна інформація є частиною значення, але не, наприклад, url.<base>.insteadOf, де конфіденційна інформація може бути частиною ключа.

--exec-path[=<path>]

Шлях до місця встановлення ваших основних програм Git. Цим також можна керувати, встановивши змінну середовища GIT_EXEC_PATH. Якщо шлях не вказано, git виведе поточні налаштування та завершить роботу.

--html-path

Вивести шлях (без скісної риски в кінці) до місця, де встановлено HTML-документацію Git, і завершити роботу.

--man-path

Вивести manpath (див. man(1)) для сторінок довідки цієї версії Git і завершити роботу.

--info-path

Вивести шлях до місця, де встановлено файли Info цієї версії Git, і завершити роботу.

-p
--paginate

Передати весь вивід до less (або, якщо встановлено, $PAGER), якщо стандартний вивід є терміналом. Це замінює параметри конфігурації pager.<cmd> (див. розділ "Механізм конфігурації" нижче).

-P
--no-pager

Не перенаправляти вивід Git у pager.

--git-dir=<path>

Встановити шлях до репозиторію (тека «.git»). Його також можна контролювати, встановивши значення змінної середовища GIT_DIR. Це може бути абсолютний шлях або відносний шлях до поточної робочої теки.

Вказання розташування теки «.git» за допомогою цієї опції (або змінної середовища GIT_DIR) вимикає функцію виявлення репозиторію, яка намагається знайти теку з підтекою «.git» (саме так виявляються репозиторій і верхній рівень робочого дерева), та повідомляє Git, що ви перебуваєте на верхньому рівні робочого дерева. Якщо ви не перебуваєте у теці верхнього рівня робочого дерева, вам слід повідомити Git, де знаходиться верхній рівень робочого дерева, за допомогою опції --work-tree=<path> (або змінної середовища GIT_WORK_TREE)

Якщо ви просто хочете запустити git так, ніби він був запущений у <шляху>, тоді використовуйте git -C <шлях>.

--work-tree=<path>

Вкажіть шлях до робочого дерева. Це може бути абсолютний шлях або шлях, відносний до поточної робочої теки. Цей параметр також можна налаштувати за допомогою змінної середовища GIT_WORK_TREE та змінної конфігурації core.worktree (докладніше див. core.worktree у розділі git-config[1]).

--namespace=<path>

Встановіть простір імен Git. Див. gitnamespaces[7] для отримання додаткової інформації. Еквівалентно встановленню змінної середовища GIT_NAMESPACE.

--bare

Розглядати репозиторій як чистий («голий») репозиторій. Якщо середовище GIT_DIR не встановлено, воно встановлюється на поточну робочу теку.

--no-replace-objects

Не використовуйте замінюючі посилання для заміни обʼєктів Git. Це еквівалентно експорту змінної середовища GIT_NO_REPLACE_OBJECTS з будь-яким значенням. Див. git-replace[1] для отримання додаткової інформації.

--no-lazy-fetch

Не завантажвати відсутні об’єкти з віддаленого промісора на вимогу. Корисно використовувати разом із командою git cat-file -e <object>, щоб перевірити, чи об’єкт доступний локально. Це еквівалентно встановленню значення змінної середовища GIT_NO_LAZY_FETCH на 1.

--no-optional-locks

Не виконувати опціональні операції, що вимагають блокування. Це еквівалентно встановленню значення GIT_OPTIONAL_LOCKS на 0.

--no-advice

Вимкнути виведення всіх підказок.

--literal-pathspecs

Обробляти специфікатори шляхів буквально (тобто без розширення та без «магії» специфікаторів шляхів). Це еквівалентно встановленню значення змінної середовища GIT_LITERAL_PATHSPECS на 1.

--glob-pathspecs

Додати магію "glob" до всіх специфікацій шляхів. Це еквівалентно встановленню змінної середовища GIT_GLOB_PATHSPECS на 1. Вимкнути розширення за допомогою символів-замінників для окремих специфікацій шляху можна за допомогою магії «:(literal)»

--noglob-pathspecs

Додати магію "literal" до всіх специфікацій шляхів. Це еквівалентно встановленню змінної середовища GIT_NOGLOB_PATHSPECS на 1. Увімкнути використання шаблонів для окремих специфікацій шляху можна за допомогою магічного символу «:(glob)» у специфікації шляху

--icase-pathspecs

Додати магію "icase" до всіх специфікацій шляхів. Еквівалентно встановленню змінної середовища GIT_ICASE_PATHSPECS на 1.

--list-cmds=<group>[,<group>…​]

Вивести список команд за групами. Це внутрішній/експериментальний параметр, який у майбутньому може бути змінений або видалений. Підтримувані групи: builtins, parseopt (вбудовані команди, що використовують параметри розбору), deprecated (застарілі вбудовані команди), main (усі команди в теці libexec), others (усі інші команди в $PATH, що мають префікс git-), list-<category> (див. категорії у файлі command-list.txt), nohelpers (виключити допоміжні команди), alias та config (отримати список команд зі змінної конфігурації completion.commands)

--attr-source=<tree-ish>

Зчитувати gitattributes з <tree-ish> замість робочого дерева. Див. gitattributes[5]. Це еквівалентно встановленню змінної середовища GIT_ATTR_SOURCE.

КОМАНДИ GIT

Ми поділяємо Git на команди високого рівня («porcelain») та команди низького рівня («plumbing»). Буквально — «санфаянс» та «каналізація».

Високорівневі команди (porcelain)

Ми розділяємо команди porcelain на основні команди та деякі допоміжні утиліти користувача.

Основні високорівневі (porcelain) команди

Warning

Missing uk/{build_dir}/cmds-mainporcelain.adoc

See original version for this content.

Допоміжні команди

Маніпулятори:

Warning

Missing uk/{build_dir}/cmds-ancillarymanipulators.adoc

See original version for this content.

Дослідники:

Warning

Missing uk/{build_dir}/cmds-ancillaryinterrogators.adoc

See original version for this content.

Взаємодія з іншими

Ці команди призначені для взаємодії з сторонніми системами управління версіями та з іншими користувачами за допомогою обміну латками електронною поштою.

Warning

Missing uk/{build_dir}/cmds-foreignscminterface.adoc

See original version for this content.

Скидання, відновлення та повернення до попереднього стану

Існує три команди зі схожими назвами: git reset, git restore та git revert.

  • git-revert[1] створює новий коміт, який скасовує зміни, внесені іншими комітами.

  • git-restore[1] відновлює файли у робочому дереві з індексу або іншого коміту. Ця команда не оновлює вашу гілку. Команду також можна використовувати для відновлення файлів в індексі з іншого коміту.

  • git-reset[1] оновлює вашу гілку, шляхом переміщення вершини для додавання або видалення комітів з гілки. Ця операція змінює історію комітів.

    Команда git reset також може бути використана для відновлення індексу, що перетинається з командою git restore.

Низькорівневі команди (plumbing)

Хоча Git містить власний шар високорівневих команд, його низькорівневих команд достатньо для підтримки розробки альтернативних високорівневих команд. Розробники таких команд можуть почати з ознайомлення з git-update-index[1] та git-read-tree[1].

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

У наступному описі низькорівневі команди поділяються на команди, що маніпулюють обʼєктами (у репозиторії, індексі та робочому дереві), команди, що опитують та порівнюють обʼєкти, та команди, що переміщують обʼєкти та посилання між репозиторіями.

Команди маніпуляцій

Warning

Missing uk/{build_dir}/cmds-plumbingmanipulators.adoc

See original version for this content.

Команди дослідження

Warning

Missing uk/{build_dir}/cmds-plumbinginterrogators.adoc

See original version for this content.

Як правило, команди дослідження не впливають на файли в робочому дереві.

Синхронізація репозиторіїв

Warning

Missing uk/{build_dir}/cmds-synchingrepositories.adoc

See original version for this content.

Нижче наведено допоміжні команди, що використовуються вищезазначеними; кінцеві користувачі зазвичай не використовують їх безпосередньо.

Warning

Missing uk/{build_dir}/cmds-synchelpers.adoc

See original version for this content.

Внутрішні допоміжні команди

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

Warning

Missing uk/{build_dir}/cmds-purehelpers.adoc

See original version for this content.

Довідники

Наступні сторінки документації містять посібники з основ Git.

Warning

Missing uk/{build_dir}/cmds-guide.adoc

See original version for this content.

Інтерфейси репозиторію, команд та файлів

У цій документації обговорюються інтерфейси репозиторію та команд, з якими користувачі повинні безпосередньо взаємодіяти. Див. --user-formats у git-help[1] для отримання додаткової інформації про критерії.

Warning

Missing uk/{build_dir}/cmds-userinterfaces.adoc

See original version for this content.

Формати файлів, протоколи та інші інтерфейси розробника

У цій документації розглядаються формати файлів, протоколи передачі даних та інші інтерфейси розробника Git. Див. --developer-interfaces у git-help[1].

Warning

Missing uk/{build_dir}/cmds-developerinterfaces.adoc

See original version for this content.

Механізм конфігурації

Git використовує простий текстовий формат для зберігання налаштувань, які надаються для кожного репозиторію та кожного користувача. Такий файл конфігурації може виглядати так:

#
# Символи '#' чи ';' використовуються для позначення рядків коментарів
#

; основні змінні
[core]
	; Не покладатися на атрибути файлів
	filemode = false

; інформація про користувача
[user]
	name = "Junio C Hamano"
	email = "gitster@pobox.com"

Різні команди зчитують дані з конфігураційного файлу та відповідно налаштовують свою роботу. Список та докладнішу інформацію про механізм конфігурації див. у git-config[1].

Термінологія ідентифікаторів

<object>

Вказує назву/імʼя обʼєкта для обʼєктів будь-якого типу.

<blob>

Вказує імʼя обʼєкта blob.

<tree>

Вказує назву обʼєкта дерево.

<commit>

Вказує назву обʼєкта коміту.

<tree-ish>

Вказує на імʼя обʼєкта дерева, коміту або тегу. Команда, яка приймає аргумент типу <tree-ish>, в кінцевому рахунку має на меті виконати операцію над об’єктом <tree>, але автоматично розгортає посилання на об’єкти <commit> та <tag>, які вказують на <tree>.

<commit-ish>

Вказує назву обʼєкта коміту або тегу. Команда, яка приймає аргумент типу <commit-ish>, в кінцевому рахунку має на меті виконати операцію над об’єктом <commit>, але автоматично розгортає посилання на об’єкти <tag>, які вказують на <commit>.

<type>

Вказує на необхідність вказати тип обʼєкта. Наразі це один із таких типів: blob, tree, commit або tag.

<file>

Вказує імʼя файлу — майже завжди відносно кореня деревоподібної структури, яку описує GIT_INDEX_FILE.

Символічні ідентифікатори

Будь-яка команда Git, яка приймає будь-який <object>, також може використовувати наступну символічну нотацію:

HEAD

вказує на вершину поточної гілки.

<tag>

коректний тег name (тобто посилання refs/tags/<tag>).

<head>

коректне імʼя вершини (тобто посилання refs/heads/<вершина>).

Для отримання повнішого списку способів написання назв об’єктів див. розділ «ВИЗНАЧЕННЯ РЕВІЗІЙ» у gitrevisions[7].

Структура файлів/тек

Будь ласка, ознайомтесь з документом gitrepository-layout[5].

Більш детальну інформацію про кожен гачок дивіться у githooks[5].

SCM вищого рівня можуть надавати та керувати додатковою інформацією в $GIT_DIR.

Термінологія

Будь ласка, дивіться gitglossary[7].

Змінні середовища

Різні команди Git звертають увагу на змінні середовища та змінюють їхню поведінку. Змінні середовища, позначені як "Boolean", приймають свої значення так само, як і змінні конфігурації з булевими значеннями, тобто "true", "yes", "on" та додатні числа приймаються як "yes", тоді як "false", "no", "off" та "0" приймаються як "no".

Ось змінні:

Система

HOME

Вказує шлях до домашньої теки користувача. У Windows, якщо не встановлено, Git встановить змінну середовища процесу, що дорівнює: $HOMEDRIVE$HOMEPATH, якщо існують обидві змінні, $HOMEDRIVE та $HOMEPATH; інакше $USERPROFILE, якщо $USERPROFILE існує.

Репозиторій Git

Ці змінні середовища застосовуються до всіх основних команд Git. Примітка: варто зазначити, що вони можуть бути використані/перевизначені SCMS, що працює над Git, тому будьте обережні, якщо використовуєте сторонній фронтенд.

GIT_INDEX_FILE

Ця змінна середовища вказує на альтернативний файл індексу. Якщо не вказано, використовується значення змінної $GIT_DIR/index.

GIT_INDEX_VERSION

Ця змінна середовища вказує, яка версія індексу використовується під час запису індексного файлу. Вона не вплине на наявні індексні файли. Зазвичай використовується версія індексного файлу 2 або 3. Див. git-update-index[1] для отримання додаткової інформації.

GIT_OBJECT_DIRECTORY

Якщо теку для зберігання обʼєктів вказано через цю змінну середовища, то теки sha1 створюються в ній, інакше використовується стандартна тека $GIT_DIR/objects.

GIT_ALTERNATE_OBJECT_DIRECTORIES

Через незмінну природу обʼєктів Git, старі обʼєкти можна архівувати у спільні теки доступні лише для читання. Ця змінна визначає список тек обʼєктів Git, розділений символами ":" (у Windows — ";"), які можна використовувати для пошуку обʼєктів Git. Нові обʼєкти не будуть записані в ці теки.

Записи, що починаються з " (подвійних лапок), будуть інтерпретовані як шляхи в лапках у стилі C, без початкових та кінцевих подвійних лапок та з урахуванням екранування зворотною скісною рискою. Наприклад, значення "path-with-\"-and-:-in-it":vanilla-path має два шляхи: path-with-"-and-:-in-it та vanilla-path.

GIT_DIR

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

GIT_WORK_TREE

Встановлює шлях до кореня робочого дерева. Це також можна контролювати за допомогою параметра командного рядка --work-tree та змінної конфігурації core.worktree.

GIT_NAMESPACE

Встановлює простір імен Git; див. деталі у gitnamespaces[7]. Параметр командного рядка --namespace також встановлює це значення.

GIT_CEILING_DIRECTORIES

Це має бути список абсолютних шляхів, розділених двокрапками. Якщо встановлено, це список теки, до яких Git не повинен переходити за допомогою chdir під час пошуку теки репозиторію (корисно для виключення мережевих тек, що повільно завантажуються). Він не виключатиме поточну робочу теку або GIT_DIR, встановлену в командному рядку або в середовищі. Зазвичай Git має прочитати записи в цьому списку та розвʼязати будь-яке символічне посилання, яке може бути присутнім, щоб порівняти їх з поточною текою. Однак, якщо навіть цей доступ повільний, ви можете додати порожній запис до списку, щоб повідомити Git, що наступні записи не є символічними посиланнями і їх не потрібно розвʼязувати; наприклад, GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink.

GIT_DISCOVERY_ACROSS_FILESYSTEM

При запуску в теці, де відсутня тека репозиторію «.git», Git намагається знайти таку теку в батьківських теках, щоб визначити верхній рівень робочого дерева, але стандартно він не перетинає межі файлової системи. Цю булеву змінну середовища можна встановити на значення true, щоб вказати Git не зупинятися на межі файлової системи. Як і GIT_CEILING_DIRECTORIES, це не вплине на явну теку репозиторію, задану через GIT_DIR або в командному рядку.

GIT_COMMON_DIR

Якщо для цієї змінної встановлено шлях, файли, що не належать до робочого дерева та зазвичай знаходяться в $GIT_DIR, будуть взяті з цього шляху. Файли, специфічні для робочого дерева, такі як HEAD або index, беруться з $GIT_DIR. Див. gitrepository-layout[5] та git-worktree[1] для отримання детальної інформації. Ця змінна має нижчий пріоритет, ніж інші змінні шляху, такі як GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY…​

GIT_DEFAULT_HASH

Якщо цю змінну встановлено, для нових репозиторіїв як стандартний алгоритм хешування буде встановлено саме це значення. Під час клонування це значення ігнорується, і завжди використовується налаштування віддаленого репозиторію. Стандартним значенням є «sha1». Див. --object-format у git-init[1].

GIT_DEFAULT_REF_FORMAT

Якщо для цієї змінної встановлено значення, стандартний формат бекенду посилань для нових репозиторіїв буде встановлено на це значення. Стандартним значенням є «files». Див. --ref-format у git-init[1].

Коміти Git

GIT_AUTHOR_NAME

Імʼя, зрозуміле для людини, яке використовується для ідентифікації автора під час створення об’єктів комітів або тегів, а також під час запису в reflog. Перекриває параметри конфігурації user.name та author.name.

GIT_AUTHOR_EMAIL

Адреса електронної пошти, що використовується для ідентифікації автора під час створення обʼєктів комітів або тегів, або під час запису в reflog. Перекриває параметри конфігурації user.email та author.email.

GIT_AUTHOR_DATE

Дата, що використовується для ідентифікації автора під час створення обʼєктів комітів або тегів, або під час запису reflog. Див. git-commit[1] для коректних форматів.

GIT_COMMITTER_NAME

Імʼя, зрозуміле для людини, яке використовується в ідентифікаторі автора коміту (комітера) під час створення обʼєктів коміту або тегу, а також під час запису журналів reflog. Перекриває параметри конфігурації user.name та committer.name.

GIT_COMMITTER_EMAIL

Адреса електронної пошти, що використовується для ідентифікації автора під час створення обʼєктів комітів або тегів, або під час запису в reflog. Перекриває параметри конфігурації user.email та committer.email.

GIT_COMMITTER_DATE

Дата, що використовується для ідентифікації комітера під час створення обʼєктів комітів або тегів, а також під час запису журналів reflog. Див. git-commit[1] для коректних форматів.

EMAIL

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

Різниці в Git

GIT_DIFF_OPTS

Єдиним допустимим параметром є "--unified=??" або "-u??", щоб встановити кількість рядків контексту, що показується під час створення уніфікованого diff. Це має пріоритет над будь-яким значенням опції "-U" або "--unified", переданим у командному рядку Git diff.

GIT_EXTERNAL_DIFF

Коли встановлено змінну середовища GIT_EXTERNAL_DIFF, програма, зазначена в ній, викликається для генерації різниць, і Git не використовує вбудований механізм diff. Для шляху, який додається, видаляється або змінюється, GIT_EXTERNAL_DIFF викликається з 7 параметрами:

path old-file old-hex old-mode new-file new-hex new-mode

де:

<old|new>-file

файли, які GIT_EXTERNAL_DIFF може використовувати для читання вмісту <old|new>,

<old|new>-hex

40-шістнадцяткові хеші SHA-1,

<old|new>-mode

вісімкове представлення режимів доступу до файлів.

Параметри файлу можуть вказувати на робочий файл користувача (наприклад, new-file у "git-diff-files"), /dev/null (наприклад, old-file, коли додається новий файл) або тимчасовий файл (наприклад, old-file в індексі). GIT_EXTERNAL_DIFF не повинен турбуватися про відʼєднання тимчасового файлу — він видаляється, коли GIT_EXTERNAL_DIFF завершує роботу.

Для шляху, який не є обʼєднаним, викликається GIT_EXTERNAL_DIFF з одним параметром — <path>.

Для кожного викликаного шляху GIT_EXTERNAL_DIFF встановлюються дві змінні середовища: GIT_DIFF_PATH_COUNTER та GIT_DIFF_PATH_TOTAL.

GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE

Якщо для цієї булевої змінної середовища встановлено значення true, то команда GIT_EXTERNAL_DIFF має повернути код виходу 0, якщо вона вважає вхідні файли рівними, або 1, якщо вона вважає їх різними, як-от diff(1). Якщо ж для неї встановлено значення false, що є стандартним значенням, то команда має повернути код виходу 0 незалежно від рівності. Будь-який інший код виходу призведе до того, що Git повідомить про фатальну помилку.

GIT_DIFF_PATH_COUNTER

Лічильник, що починається з 1, збільшується на одиницю для кожного шляху.

GIT_DIFF_PATH_TOTAL

Загальна кількість шляхів.

інше

GIT_MERGE_VERBOSITY

Число, що контролює обсяг виводу, що відображається рекурсивною стратегією злиття. Перевизначає merge.verbosity. Див. git-merge[1]

GIT_PAGER

Ця змінна середовища перевизначає $PAGER. Якщо їй встановлено значення порожнього рядка або значення "cat", Git не запустить pager. Дивіться також опцію core.pager у git-config[1].

GIT_PROGRESS_DELAY

Число, яке контролює, на скільки секунд слід затримати показ необовʼязкових індикаторів виконання. Стандартне значення 1.

GIT_EDITOR

Ця змінна середовища перевизначає $EDITOR та $VISUAL. Вона використовується кількома командами Git, коли в інтерактивному режимі потрібно запустити редактор. Див. також git-var[1] та опцію core.editor у git-config[1].

GIT_SEQUENCE_EDITOR

Ця змінна середовища перевизначає налаштований редактор Git під час редагування списку завдань інтерактивного перебазування. Див. також git-rebase[1] та опцію sequence.editor у git-config[1].

GIT_SSH
GIT_SSH_COMMAND

Якщо будь-яка з цих змінних середовища встановлена, то git fetch та git push використовуватимуть зазначену команду замість ssh, коли їм потрібно буде підключитися до віддаленої системи. Параметри командного рядка, що передаються налаштованій команді, визначаються варіантом ssh. Дивіться опцію ssh.variant у git-config[1] для отримання детальної інформації.

$GIT_SSH_COMMAND має пріоритет над $GIT_SSH та інтерпретується оболонкою, що дозволяє додавати додаткові аргументи. $GIT_SSH, з іншого боку, має бути лише шляхом до програми (яка може бути скриптом оболонки, якщо потрібні додаткові аргументи).

Зазвичай простіше налаштувати будь-які потрібні опції через ваш особистий файл .ssh/config. Будь ласка, зверніться до документації ssh для отримання додаткової інформації.

GIT_SSH_VARIANT

Якщо цю змінну середовища встановлено, вона перевизначає автоматичне визначення Git, чи посилаються GIT_SSH/GIT_SSH_COMMAND/core.sshCommand на OpenSSH, plink чи tortoiseplink. Ця змінна перевизначає налаштування конфігурації ssh.variant, яке виконує ту саму функцію.

GIT_SSL_NO_VERIFY

Встановлення та експорт цієї змінної середовища до будь-якого значення повідомляє Git, що не потрібно перевіряти SSL-сертифікат під час отримання або надсилання через HTTPS.

GIT_ATTR_SOURCE

Встановлює деревоподібну структуру, з якої будуть зчитуватися атрибути gitattributes.

GIT_ASKPASS

Якщо цю змінну середовища встановлено, то команди Git, яким потрібно отримати паролі або парольні фрази (наприклад, для автентифікації HTTP або IMAP), викличуть цю програму з відповідним запитом як аргументом командного рядка та зчитають пароль з її STDOUT. Дивіться також опцію core.askPass у git-config[1].

GIT_TERMINAL_PROMPT

Якщо для цієї булевої змінної середовища встановлено значення false, git не виводитиме запити в терміналі (наприклад, під час запиту HTTP-автентифікації).

GIT_CONFIG_GLOBAL
GIT_CONFIG_SYSTEM

Використовувати конфігурацію з заданих файлів, а не з глобальних або системних файлів конфігурації. Якщо встановлено GIT_CONFIG_SYSTEM, файл конфігурації системи, визначений під час збірки (зазвичай /etc/gitconfig), не буде зчитуватися. Аналогічно, якщо встановлено GIT_CONFIG_GLOBAL, ні $HOME/.gitconfig, ні $XDG_CONFIG_HOME/git/config не будуть зчитуватися. Можна встановити значення /dev/null, щоб пропустити зчитування файлів конфігурації відповідного рівня.

GIT_CONFIG_NOSYSTEM

Чи слід пропускати зчитування налаштувань із загальносистемного файлу $(prefix)/etc/gitconfig. Цю булеву змінну середовища можна використовувати разом із $HOME та $XDG_CONFIG_HOME для створення передбачуваного середовища для вимогливого скрипта, або ж встановити для неї значення true, щоб тимчасово уникнути використання файлу /etc/gitconfig з помилками, поки хтось із достатніми правами виправить це.

GIT_FLUSH

Якщо для цієї булевої змінної середовища встановлено значення true, то такі команди, як git blame (в інкрементному режимі), git rev-list, git log, git check-attr та git check-ignore, примусово очищатимуть вихідний потік після очищення кожного запису. Якщо для цієї змінної встановлено значення false, вивід цих команд буде виконуватися з використанням повністю буферизованого вводу-виводу. Якщо цю змінну середовища не встановлено, Git вибере буферизоване або орієнтоване на записи очищення залежно від того, чи перенаправляється stdout до файлу чи ні.

GIT_TRACE

Дозволяє загальні повідомлення трасування, наприклад, розширення псевдонімів, виконання вбудованих команд та виконання зовнішніх команд.

Якщо для цієї змінної встановлено значення "1", "2" або "true" (порівняння не враховує регістр), повідомлення трасування будуть виведені на stderr.

Якщо змінній встановлено ціле значення більше за 2 та менше за 10 (строго), то Git інтерпретуватиме це значення як відкритий файловий дескриптор і спробує записати повідомлення трасування в цей файловий дескриптор.

Або ж, якщо змінній встановлено абсолютний шлях (що починається з символу /), Git інтерпретуватиме це як шлях до файлу та спробує додати до нього повідомлення трасування.

Скидання значення змінної або присвоєння їй порожнього значення, «0» чи «false» (регістр не має значення) вимикає виведення повідомлень трасування.

GIT_TRACE_FSMONITOR

Вмикає повідомлення трасування для розширення монітора файлової системи. Див. GIT_TRACE для отримання доступних параметрів виводу трасування.

GIT_TRACE_PACK_ACCESS

Вмикає повідомлення трасування для всіх звернень до будь-яких пакунків. Для кожного звернення записується імʼя файлу пакунка та зміщення в пакунку. Це може бути корисним для усунення деяких проблем продуктивності, повʼязаних з пакунком. Див. GIT_TRACE для отримання інформації про доступні параметри виводу трасування.

GIT_TRACE_PACKET

Вмикає повідомлення трасування для всіх пакунків, що надходять або виходять з певної програми. Це може допомогти з налагодженням узгодження обʼєктів або іншими проблемами протоколу. Трасування вимикається для пакунка, що починається з "PACK" (але див. GIT_TRACE_PACKFILE нижче). Див. GIT_TRACE для доступних параметрів виводу трасування.

GIT_TRACE_PACKFILE

Дозволяє трасування файлів pack, надісланих або отриманих певною програмою. На відміну від інших видів трасування, цей вивід є дослівним: без заголовків і без кодування двійкових даних. Майже напевно вам краще буде перенаправити вивід у файл (наприклад, GIT_TRACE_PACKFILE=/tmp/my.pack), а не виводити його в термінал або змішувати з іншими видами трасування.

Зверніть увагу, що наразі це реалізовано лише для клієнтської частини клонів та вибірок.

GIT_TRACE_PERFORMANCE

Вмикає трасування повідомлень, пов’язаних із продуктивністю, наприклад, загальний час виконання кожної команди Git. Див. GIT_TRACE для отримання доступних параметрів трасування.

GIT_TRACE_REFS

Вмикає повідомлення трасування для операцій з базою даних посилань. Див. GIT_TRACE для отримання доступних параметрів виводу трасування.

GIT_TRACE_SETUP

Увімкнути виведення повідомлень трасування, що містять інформацію про .git, робоче дерево та поточну робочу теку після завершення Git етапу налаштування. Доступні параметри виведення трасування див. у GIT_TRACE.

GIT_TRACE_SHALLOW

Вмикає повідомлення трасування, які можуть допомогти налагоджувати вибірку/клонування поверхневих репозиторіїв. Див. GIT_TRACE для доступних параметрів виводу трасування.

GIT_TRACE_CURL

Вмикає повний дамп трасування curl для всіх вхідних та вихідних даних, включаючи описову інформацію, транспортного протоколу git. Це схоже на виконання curl --trace-ascii у командному рядку. Див. GIT_TRACE для доступних параметрів виводу трасування.

GIT_TRACE_CURL_NO_DATA

Коли ввімкнено трасування curl (див. GIT_TRACE_CURL вище), не виводити дані (тобто виводити лише інформаційні рядки та заголовки).

GIT_TRACE2

Дозволяє отримувати детальніші повідомлення трасування з бібліотеки "trace2". Вивід з GIT_TRACE2 — це простий текстовий формат для зручності читання людиною.

Якщо для цієї змінної встановлено значення "1", "2" або "true" (порівняння не враховує регістр), повідомлення трасування будуть виведені на stderr.

Якщо змінній встановлено ціле значення більше за 2 та менше за 10 (строго), то Git інтерпретуватиме це значення як відкритий файловий дескриптор і спробує записати повідомлення трасування в цей файловий дескриптор.

Або ж, якщо змінній встановлено абсолютний шлях (що починається з символу /), Git інтерпретуватиме це як шлях до файлу та спробує додати до нього повідомлення трасування. Якщо шлях вже існує та є текою, повідомлення трасування будуть записані до файлів (по одному на процес) у цій теці, названих відповідно до останнього компонента SID та необовʼязкового лічильника (щоб уникнути колізій імен файлів).

Крім того, якщо змінна має значення af_unix:[<тип-сокета>:]<абсолютний-шлях>, Git спробує відкрити шлях як Unix Domain Socket. Тип сокета може бути stream або dgram.

Скидання значення змінної або присвоєння їй порожнього значення, «0» чи «false» (регістр не має значення) вимикає виведення повідомлень трасування.

Див. документація Trace2 для отримання повної інформації.

GIT_TRACE2_EVENT

Цей параметр записує дані у форматі JSON, який підходить для машинної інтерпретації. Див. GIT_TRACE2 для отримання доступних параметрів виводу трасування та документація Trace2 для отримання повної інформації.

GIT_TRACE2_PERF

Окрім текстових повідомлень, доступних у GIT_TRACE2, цей параметр записує формат на основі стовпців для розуміння вкладених областей. Див. GIT_TRACE2 для отримання інформації про доступні параметри виводу трасування та документація Trace2 для отримання повної інформації.

GIT_TRACE_REDACT

Зазвичай, коли трасування активовано, Git видаляє значення файлів cookie, заголовків "Authorization:", "Proxy-Authorization:" та URI packfile. Встановлення для цієї булевої змінної середовища значення false запобігає цьому видаленню.

GIT_NO_REPLACE_OBJECTS

Встановлення та експорт цієї змінної середовища вказує Git ігнорувати посилання на заміну та не замінювати обʼєкти Git.

GIT_LITERAL_PATHSPECS

Якщо встановити для цієї булевої змінної середовища значення true, Git буде трактувати всі специфікатори шляхів буквально, а не як шаблони. Наприклад, виконання команди GIT_LITERAL_PATHSPECS=1 git log -- “*.c” призведе до пошуку комітів, які зачіпають шлях *.c, а не будь-які шляхи, що відповідають шаблону узагальнення *.c. Це може знадобитися, якщо ви передаєте Git буквальні шляхи (наприклад, шляхи, раніше надані вам командою git ls-tree, виводом diff з опцією --raw тощо).

GIT_GLOB_PATHSPECS

Встановлення цієї булевої змінної середовища в значення true призведе до того, що Git трактуватиме всі специфікації шляхів як шаблони (також відомі як "glob" магія).

GIT_NOGLOB_PATHSPECS

Встановлення цієї булевої змінної середовища в значення true призведе до того, що Git трактуватиме всі специфікації шляхів як літерали (тобто "literal" магію).

GIT_ICASE_PATHSPECS

Якщо встановити для цієї булевої змінної середовища значення true, Git трактуватиме всі специфікації шляхів як нечутливі до регістру.

GIT_NO_LAZY_FETCH

Якщо встановити для цієї булевої змінної середовища значення true, це вкаже Git не завантажувати відсутні об’єкти з віддаленого сервера promisor за запитом.

GIT_REFLOG_ACTION

Під час оновлення ref створюються записи в reflog, щоб відстежувати причину оновлення ref (зазвичай це назва команди верхнього рівня, яка оновила ref), а також старі та нові значення ref. Скриптована команда Porcelain може використовувати допоміжну функцію set_reflog_action у git-sh-setup, щоб встановити своє імʼя для цієї змінної, коли вона викликається як команда верхнього рівня кінцевим користувачем, для запису в тілі reflog.

GIT_REF_PARANOIA

Якщо для цієї булевої змінної середовища встановлено значення false, під час перебору списків посилань ігноруються пошкоджені або неправильно названі посилання. Зазвичай Git намагатиметься включити такі посилання, що може призвести до невдачі деяких операцій. Зазвичай це є кращим варіантом, оскільки потенційно руйнівні операції (наприклад, git-prune[1]) краще перервати, ніж ігнорувати пошкоджені посилання (і, таким чином, вважати історію, на яку вони вказують, такою, що не варта збереження). Стандартне значення — 1 (тобто бути надто обережним щодо виявлення та припинення всіх операцій). Зазвичай вам не потрібно встановлювати це значення на 0, але це може бути корисно, коли ви намагаєтеся врятувати дані з пошкодженого репозиторію.

GIT_COMMIT_GRAPH_PARANOIA

Під час завантаження обʼєкта коміту з графу комітів, Git виконує перевірку існування обʼєкта в базі даних обʼєктів. Це робиться для того, щоб уникнути проблем із застарілими графами комітів, які містять посилання на вже видалені коміти, але це призводить до зниження продуктивності.

Стандартним значенням є «false», що вимикає зазначену вище поведінку. Встановлення значення «true» увімкне перевірку на наявність, завдяки чому застарілі коміти ніколи не будуть повертатися з графа комітів, хоча це й відбуватиметься за рахунок продуктивності.

GIT_ALLOW_PROTOCOL

Якщо встановлено список протоколів, розділених двокрапками, поводитися так, ніби protocol.allow встановлено на never, і для кожного з перелічених протоколів protocol.<name>.allow встановлено на always (замінюючи будь-яку поточну конфігурацію). Див. опис protocol.allow у git-config[1] для отримання додаткової інформації.

GIT_PROTOCOL_FROM_USER

Встановлення цієї булевої змінної середовища у значення false дозволить запобігти використанню протоколів, які застосовуються під час операцій fetch, push та clone і налаштовані на стан user. Це корисно для обмеження рекурсивної ініціалізації субмодулів з ненадійного репозиторію або для програм, які передають потенційно ненадійні URL-адреси в команди git. Докладнішу інформацію див. у git-config[1].

GIT_PROTOCOL

Тільки для внутрішнього використання. Використовується для встановлення зʼєднання за протоколом передачі даних. Містить список ключів, розділених двокрапкою :, з необовʼязковими значеннями у форматі <ключ>[=<значення>]. Наявність невідомих ключів і значень слід ігнорувати.

Зверніть увагу, що сервери можуть потребувати налаштування, щоб дозволити цій змінній передавати дані через деякі транспортні канали. Вона буде поширюватися автоматично під час доступу до локальних репозиторіїв (тобто file:// або шлях файлової системи), а також через протокол git://. Для git-over-http це має працювати автоматично в більшості конфігурацій, але див. обговорення в git-http-backend[1]. Для git-over-ssh ssh-сервер може потребувати налаштування, щоб дозволити клієнтам передавати цю змінну (наприклад, використовуючи AcceptEnv GIT_PROTOCOL з OpenSSH).

Ця конфігурація необовʼязкова. Якщо змінну не поширювати, клієнти повернуться до оригінального протоколу "v0" (але можуть втратити деякі покращення продуктивності або функції). Ця змінна наразі впливає лише на клони та вибірки; вона ще не використовується для надсилання (але може використовується в майбутньому).

GIT_OPTIONAL_LOCKS

Якщо для цієї булевої змінної середовища встановлено значення false, Git виконає будь-яку запитувану операцію, не виконуючи при цьому жодних додаткових субоперацій, що вимагають блокування. Наприклад, це завадить команді git status оновлювати індекс як побічний ефект. Це корисно для процесів, що виконуються у фоновому режимі, які не повинні створювати конфліктів блокування з іншими операціями над репозиторієм. Стандартне значення — 1.

GIT_REDIRECT_STDIN
GIT_REDIRECT_STDOUT
GIT_REDIRECT_STDERR

Тільки для Windows: дозволяє перенаправлення стандартних дескрипторів вводу/виводу/помилок на шляхи, визначені змінними середовища. Це особливо корисно в багатопотокових застосунках, де канонічний спосіб передачі стандартних дескрипторів через CreateProcess() не є варіантом, оскільки це вимагатиме, щоб дескриптори були позначені як успадковувані (і, як наслідок, кожен породжений процес успадковуватиме їх, можливо, блокуючи звичайні операції Git). Основним цільовим варіантом використання є використання іменованих каналів для звʼязку (наприклад, \\.\pipe\my-git-stdin-123).

Підтримуються два спеціальні значення: off просто закриє відповідний стандартний дескриптор, а якщо GIT_REDIRECT_STDERR дорівнює 2>&1, стандартна помилка буде перенаправлена на той самий дескриптор, що й стандартний вивід.

GIT_PRINT_SHA1_ELLIPSIS (застарілий)

Якщо встановлено значення yes, вивести три крапки після (скороченого) значення SHA-1. Це впливає на індикацію відокремлених HEAD (git-checkout[1]) та необроблений вивід diff (git-diff[1]). Виведення трикрапки у згаданих випадках більше не вважається доцільним, і підтримка цієї функції, ймовірно, буде вилучена в найближчому майбутньому (разом із змінною).

GIT_ADVICE

Якщо встановлено значення 0, то всі повідомлення з порадами будуть вимкнені. Ці повідомлення призначені для надання підказок користувачам, які можуть допомогти їм вийти з проблемних ситуацій або скористатися новими функціями. Користувачі можуть вимкнути окремі повідомлення за допомогою ключів конфігурації advice.*. Ці повідомлення можуть заважати роботі інструментів, що виконують процеси Git, тому ця змінна доступна для вимкнення повідомлень. (Глобальна опція --no-advice також доступна, але старі версії Git можуть дати збій, якщо ця опція не розпізнається. Змінна середовища буде проігнорована версіями Git, які її не розпізнають.)

Обговорення

Більш детальну інформацію про наступне можна знайти за розділ посібника користувача про концепції Git та gitcore-tutorial[7].

Проєкт Git зазвичай складається з робочої теки з вкладеною текою ".git" на верхньому рівні. Тека .git містить, серед іншого, стиснуту базу даних обʼєктів, що представляє повну історію проєкту, файл "індексу", який повʼязує цю історію з поточним вмістом робочого дерева, та іменовані вказівники на цю історію, такі як теги та вершини гілок.

База даних обʼєктів містить обʼєкти трьох основних типів: блоби, які зберігають дані файлів; дерева, які вказують на блоби та інші дерева для побудови ієрархій тек; та коміти, кожен з яких посилається на одне дерево та певну кількість батьківських комітів.

Коміт, еквівалентний тому, що в інших системах називається «набором змін» або «версією», представляє крок в історії проєкту, а кожен батьківський елемент представляє безпосередньо попередній крок. Коміти з більш ніж одним батьківським елементом представляють злиття незалежних ліній розробки.

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

Під час першого створення обʼєкти зберігаються в окремих файлах, але для ефективності пізніше їх можна стиснути разом у «pack-файли».

Іменовані вказівники, які називаються ref (посилання), позначають важливі моменти в історії. Посилання може містити SHA-1-імʼя обʼєкта або імʼя іншого посилання (останнє називається «символічним посиланням»). Посилання, імена яких починаються з refs/head/, містять SHA-1-ім’я найновішого коміту (або «head») гілки, в якій ведеться розробка. Імена SHA-1 тегів, що представляють інтерес, зберігаються в refs/tags/. Символічне посилання з іменем HEAD містить назву гілки, яка наразі вибрана для роботи.

Файл індексу ініціалізується списком усіх шляхів, а для кожного шляху — об’єктом blob та набором атрибутів. Об’єкт blob представляє вміст файлу станом вершини поточної гілки. Атрибути (час останнього редагування, розмір тощо) беруться з відповідного файлу в робочому дереві. Подальші зміни в робочому дереві можна виявити, порівнявши ці атрибути. Індекс можна оновлювати новим вмістом, а з вмісту, що зберігається в індексі, можна створювати нові коміти.

Індекс також може зберігати кілька записів (так званих "stages") для заданого шляху. Ці stages використовуються для зберігання різних необʼєднаних версій файлу під час виконання обʼєднання.

БЕЗПЕКА

Деякі параметри конфігурації та файли гачків можуть змусити Git виконувати довільні команди оболонки. Оскільки конфігурація та гачки не копіюються під час виконання команди git clone, зазвичай безпечно клонувати віддалені репозиторії з ненадійним вмістом, перевіряти їх за допомогою git log тощо.

Однак виконувати команди Git у теці .git (або в робочому дереві, що її оточує) небезпечно, якщо сама тека .git походить із ненадійного джерела. Команди в її файлах конфігурації та гачках виконуються у звичайному режимі.

Зазвичай Git відмовляється працювати, якщо репозиторій належить комусь іншому, а не користувачеві, який виконує команду. Дивіться запис про safe.directory у git-config[1]. Хоча це може допомогти захистити вас у багатокористувацькому середовищі, зверніть увагу, що ви також можете отримати ненадійні репозиторії, які належать вам (наприклад, якщо ви розпаковуєте zip-файл або tar-архів із ненадійного джерела). У таких випадках вам спочатку потрібно «очистити» ненадійний репозиторій.

Якщо у вас є тека .git, яка не викликає довіри, спочатку слід клонувати її за допомогою команди git clone --no-local, щоб отримати чисту копію. Git обмежує набір опцій та гачків, які виконуватиме upload-pack — процес, що відповідає за серверну частину операції клонування або завантаження, — але майте на увазі, що площина атаки на upload-pack є значною, тому це все ж таки пов’язано з певним ризиком. Найбезпечніше — обслуговувати репозиторій як користувач без привілеїв (через git-daemon[1], ssh або за допомогою інших інструментів для зміни ідентифікаторів користувачів). Дивіться обговорення в розділі БЕЗПЕКА на сторінці git-upload-pack[1].

ДОДАТКОВА ДОКУМЕНТАЦІЯ

Дивіться посилання в розділі «опис», щоб розпочати роботу з Git. Наведена нижче інформація, ймовірно, містить більше деталей, ніж потрібно для користувача-початківця.

Розділ «Основи Git» у посібнику користувача та посилання gitcore-tutorial[7] містять вступ до архітектури Git.

Див. огляд рекомендованих робочих процесів у gitworkflows[7].

Дивіться також документи Як зробити для отримання інших корисних прикладів.

Внутрішня документація — Документація Git API.

Користувачам, які мігрують з CVS, також може бути цікаво прочитати gitcvs-migration[7].

Автори

Git був започаткований Лінусом Торвальдсом, а наразі його підтримує Джуніо К. Хамано. Численні внески надійшли зі списку розсилки Git <git@vger.kernel.org>. https://openhub.net/p/git/contributors/summary надає вам повніший список учасників.

Якщо у вас є клон самого git.git, вивід git-shortlog[1] та git-blame[1] може показати вам авторів певних частин проєкту.

Повідомлення про помилки

Повідомляйте про помилки до списку розсилки Git <git@vger.kernel.org>, де в основному здійснюється розробка та підтримка. Вам не потрібно бути підписаним на список, щоб надіслати туди повідомлення. Перегляньте архів списку розсилки за адресою https://lore.kernel.org/git, щоб переглянути попередні звіти про помилки та інші обговорення.

Проблеми, що стосуються безпеки, слід повідомляти приватно до списку розсилки Git Security <git-security@googlegroups.com>.

GIT

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