Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions book/10-git-internals/sections/environment.asc
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
=== Переменные окружения

Git всегда запускается в оболочке `bash` и использует ряд переменных окружения, определяющих его поведение.
Полезно знать, какие из них и как использовать, чтобы настроить поведение Git так как нужно вам.
Полезно знать, какие из них и как использовать, чтобы настроить поведение Git так, как нужно вам.
Мы не будем приводить исчерпывающий список переменных окружения, используемых Git, а рассмотрим самые полезные из них.


==== Глобальное поведение

Поведение Git как компьютерной программы определяется переменными окружения.

*`GIT_EXEC_PATH`* определяет где Git будет искать свои подпрограммы (такие как `git-commit`, `git-diff` и другие).
*`GIT_EXEC_PATH`* определяет, где Git будет искать свои подпрограммы (такие как `git-commit`, `git-diff` и другие).
Текущие настройки можно узнать командой `git --exec-path`.

*`HOME`* обычно не рассматривается в качестве изменяемого параметра (чересчур много вещей от неё зависят), но именно тут Git ищет глобальный файл конфигурации.
Если вам нужна по-настоящему портируемая версия Git с собственной глобальной конфигурацией, можете переопределить `HOME` в shell профиле.
Если вам нужна по-настоящему портируемая версия Git с собственной глобальной конфигурацией, можете переопределить `HOME` в shell-профиле.

*`PREFIX`* аналогичная константа, но для общесистемной конфигурации.
*`PREFIX`* -- аналогичная константа, но для общесистемной конфигурации.
Git ищет этот файл в `$PREFIX/etc/gitconfig`.

*`GIT_CONFIG_NOSYSTEM`* отключает использование файла общесистемной конфигурации, если задана.
Expand All @@ -24,19 +24,19 @@ Git всегда запускается в оболочке `bash` и испол
*`GIT_PAGER`* определяет программу, используемую для отображения постраничного вывода в командной строке.
Если не задана, в качестве запасного варианта используется `PAGER`.

*`GIT_EDITOR`* редактор, который Git запустит, когда пользователю понадобится отредактировать какой-нибудь текст (например, сообщение коммита).
*`GIT_EDITOR`* -- редактор, который Git запустит, когда пользователю понадобится отредактировать какой-нибудь текст (например, сообщение коммита).
Если не задана -- используется `EDITOR`.


==== Расположение репозитория

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

*`GIT_DIR`* -- это месторасположение каталога `.git`.
Если эта переменная не задана, Git будет переходить вверх по дереву каталогов, пока не достигнет `~` (домашнего каталога пользователя) или `/` (корневого каталога), проверяя на каждом шагу наличие каталога `.git`.

*`GIT_CEILING_DIRECTORIES`* управляет процессом поиска каталога `.git`.
Если вы работаете с медленной файловой системой (типа ленточного накопителя или сетевого каталога), вы можете запретить Git доступ к `.git` без надобности, например, для построения строки приветствия.
Если вы работаете с медленной файловой системой (типа ленточного накопителя или сетевого каталога), вы можете запретить Git доступ к `.git` без надобности, например для построения строки приветствия.

*`GIT_WORK_TREE`* -- это путь к корневому рабочему каталогу для не-серверного репозитория (с непустым рабочим каталогом).
Если задана `GIT_DIR` или указан параметр `--git-dir`, но ничего из `--work-tree`, `GIT_WORK_TREE` или `core.worktree` не задано, то текущий каталог будет считаться корневым.
Expand All @@ -51,11 +51,11 @@ Git использует некоторые переменные окружен

==== Пути к файлам

Эти переменные определяют как Git будет понимать пути к файлам и шаблоны путей.
Эти переменные определяют, как Git будет понимать пути к файлам и шаблоны путей.
Эти настройки применяются к записям в файлах `.gitignore` и к путям, переданным в командной строке (`git add *.c`).

*`GIT_GLOB_PATHSPECS` и `GIT_NOGLOB_PATHSPECS`* управляют поведением шаблонов путей к файлам.
Если переменная `GIT_GLOB_PATHSPECS` установлена в 1, то специальные символы интерпретируются как шаблон (поведение по умолчанию); если же `GIT_NOGLOB_PATHSPECS` установлена в 1, то специальные символы обрабатываются буквально, это означает, что, например, запись `+*.c+` будет обозначать лишь единственный файл с _именем_ `+*.c+`, а не все файлы с расширением `.c`.
Если переменная `GIT_GLOB_PATHSPECS` установлена в 1, то специальные символы интерпретируются как шаблон (поведение по умолчанию); если же `GIT_NOGLOB_PATHSPECS` установлена в 1, то специальные символы обрабатываются буквально. Это означает, что, например, запись `+*.c+` будет обозначать лишь единственный файл с _именем_ `+*.c+`, а не все файлы с расширением `.c`.
Это поведение можно переопределить в каждом конкретном случае, приписывая к путям строки `:(glob)` или `:(literal)`, например `:(glob)*.c`.

*`GIT_LITERAL_PATHSPECS`* отключает шаблоны в путях: ни специальные символы, ни специальные префиксы работать не будут.
Expand All @@ -65,21 +65,21 @@ Git использует некоторые переменные окружен

==== Фиксация изменений

Окончательное создание объекта коммита обычно производится командой `git-commit-tree`, которая использует приведённые ниже переменные окружения в качестве основного источника информации и прибегает к использованию файлов конфигурации только если эти переменные не заданы.
Окончательное создание объекта коммита обычно производится командой `git-commit-tree`, которая использует приведённые ниже переменные окружения в качестве основного источника информации и прибегает к использованию файлов конфигурации, только если эти переменные не заданы.

*`GIT_AUTHOR_NAME`* используется для указания имени автора коммита.

*`GIT_AUTHOR_EMAIL`* задаёт адрес электронной почты автора коммита.

*`GIT_AUTHOR_DATE`* метка времени на момент создания коммита.

*`GIT_COMMITTER_NAME`* используется для указания имени, применившего коммит.
*`GIT_COMMITTER_NAME`* используется для указания имени применившего коммит.

*`GIT_COMMITTER_EMAIL`* задаёт адрес электронной почты, применившего коммит.
*`GIT_COMMITTER_EMAIL`* задаёт адрес электронной почты применившего коммит.

*`GIT_COMMITTER_DATE`* метка времени на момент применения коммита.
*`GIT_COMMITTER_DATE`* -- метка времени на момент применения коммита.

*`EMAIL`* используется, как запасное значение, если конфигурационный параметр `user.email` не задан.
*`EMAIL`* используется как запасное значение, если конфигурационный параметр `user.email` не задан.
Если же и _эта переменная_ не задана, Git будет использовать имя пользователя в системе и имя хоста.


Expand All @@ -88,8 +88,8 @@ Git использует некоторые переменные окружен
Git использует библиотеку `curl` для работы с сетью через HTTP, поэтому *`GIT_CURL_VERBOSE`* указывает Git выводить все сообщения, генерируемые этой библиотекой.
Это аналогично использованию `curl -v` в командной строке.

*`GIT_SSL_NO_VERIFY`* отключает проверку SSL сертификатов.
Это может пригодиться если вы используете самоподписанные сертификаты для работы репозиториев через HTTPS, или если вы настраиваете Git сервер и ещё не установили необходимые сертификаты.
*`GIT_SSL_NO_VERIFY`* отключает проверку SSL-сертификатов.
Это может пригодиться, если вы используете самоподписанные сертификаты для работы репозиториев через HTTPS или если вы настраиваете Git-сервер и ещё не установили необходимые сертификаты.

Если на протяжении более чем *`GIT_HTTP_LOW_SPEED_TIME`* секунд скорость передачи данных не поднималась выше *`GIT_HTTP_LOW_SPEED_LIMIT`* байт в секунду, Git прервёт операцию.
Эти переменные переопределяют значения конфигурационных параметров `http.lowSpeedLimit` и `http.lowSpeedTime`.
Expand All @@ -112,23 +112,23 @@ Git использует библиотеку `curl` для работы с се
*`GIT_MERGE_VERBOSITY`* задаёт уровень детализации вывода при рекурсивном слиянии.
Возможные значения перечислены ниже:

* 0 не выводить ничего, кроме возможного единственного сообщения об ошибке.
* 1 выводить только конфликты.
* 2 также выводить изменения файлов.
* 3 показывать пропущенные файлы, в которых нет изменений.
* 4 выводить все пути в том же порядке как они обрабатываются.
* 0 -- не выводить ничего, кроме возможного единственного сообщения об ошибке;
* 1 -- выводить только конфликты;
* 2 -- также выводить изменения файлов;
* 3 -- показывать пропущенные файлы, в которых нет изменений;
* 4 -- выводить все пути в том же порядке, в котором они обрабатываются;
* 5 и выше выводят подробную отладочную информацию.

По умолчанию значение переменной равно 2.

==== Отладка

Хотите знать что _на самом деле_ делает Git?
Git ведёт достаточно подробный логи выполняемых действий и всё что вам нужно -- включить их.
Git ведёт достаточно подробные логи выполняемых действий, и всё что вам нужно -- включить их.
Возможные значения приведённых ниже переменных следующие:

* `true`, `1`, или `2` -- вывод осуществляется в стандартный поток ошибок (stderr).
* Абсолютный путь, начинающийся с `/` -- вывод будет производиться в указанный файл.
* `true`, `1`, или `2` -- вывод осуществляется в стандартный поток ошибок (stderr);
* абсолютный путь, начинающийся с `/`, -- вывод будет производиться в указанный файл.

*`GIT_TRACE`* задаёт журналирование действий, не подпадающих под какую-либо определённую категорию.
Это включает в себя раскрытие алиасов и вызовы внешних программ.
Expand Down Expand Up @@ -213,9 +213,9 @@ nothing to commit, working directory clean

==== Разное

*`GIT_SSH`* -- если значение задано, указанная программа будет использоваться вместо `ssh` при попытке Git подключиться по SSH протоколу.
*`GIT_SSH`* -- если значение задано, указанная программа будет использоваться вместо `ssh` при попытке Git подключиться по протоколу SSH.
Формат вызова этой программы такой: `$GIT_SSH [имя пользователя@]хост [-p <порт>] <команда>`.
На самом деле, это не самый простой способ настроить поведение `ssh`: дополнительные параметры командной строки не поддерживаются, и вам, скорее всего, придётся писать скрипт-обёртку и указать путь к нему в `GIT_SSH`.
На самом деле это не самый простой способ настроить поведение `ssh`: дополнительные параметры командной строки не поддерживаются, и вам, скорее всего, придётся писать скрипт-обёртку и указать путь к нему в `GIT_SSH`.
Возможно, проще будет использовать `~/.ssh/config`.

*`GIT_ASKPASS`* заменяет значение конфигурационного параметра `core.askpass`.
Expand All @@ -224,10 +224,10 @@ Git вызывает эту программу каждый раз, когда
(Читайте подробнее в разделе <<ch07-git-tools#r_credential_caching>> главы 7.)

*`GIT_NAMESPACE`* управляет доступом к ссылкам внутри пространств имён аналогично параметру `--namespace`.
Чаще всего эта переменная используется на стороне сервера когда вы хотите хранить несколько форков одного репозитория в нём же, разделяя лишь ссылки по пространствам имён.
Чаще всего эта переменная используется на стороне сервера, когда вы хотите хранить несколько форков одного репозитория в нём же, разделяя лишь ссылки по пространствам имён.

*`GIT_FLUSH`* заставляет Git отключить буферизацию при записи в стандартный поток вывода `stdout`.
Git будет чаще сбрасывать данные на диск если значение выставлено в 1, если же оно равно 0 -- весь вывод будет буферизоваться.
Git будет чаще сбрасывать данные на диск, если значение выставлено в 1; если же оно равно 0, весь вывод будет буферизоваться.
Если ничего не задано, по умолчанию используемое значение выбирается в зависимости от выполняемых действий и способа вывода данных.

*`GIT_REFLOG_ACTION`* задаёт подробное описание, записываемое в reflog.
Expand Down
Loading