diff --git a/book/10-git-internals/sections/environment.asc b/book/10-git-internals/sections/environment.asc index a389a7a9..74d2aa65 100644 --- a/book/10-git-internals/sections/environment.asc +++ b/book/10-git-internals/sections/environment.asc @@ -1,7 +1,7 @@ === Переменные окружения Git всегда запускается в оболочке `bash` и использует ряд переменных окружения, определяющих его поведение. -Полезно знать, какие из них и как использовать, чтобы настроить поведение Git так как нужно вам. +Полезно знать, какие из них и как использовать, чтобы настроить поведение Git так, как нужно вам. Мы не будем приводить исчерпывающий список переменных окружения, используемых Git, а рассмотрим самые полезные из них. @@ -9,13 +9,13 @@ Git всегда запускается в оболочке `bash` и испол Поведение 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`* отключает использование файла общесистемной конфигурации, если задана. @@ -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` не задано, то текущий каталог будет считаться корневым. @@ -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`* отключает шаблоны в путях: ни специальные символы, ни специальные префиксы работать не будут. @@ -65,7 +65,7 @@ Git использует некоторые переменные окружен ==== Фиксация изменений -Окончательное создание объекта коммита обычно производится командой `git-commit-tree`, которая использует приведённые ниже переменные окружения в качестве основного источника информации и прибегает к использованию файлов конфигурации только если эти переменные не заданы. +Окончательное создание объекта коммита обычно производится командой `git-commit-tree`, которая использует приведённые ниже переменные окружения в качестве основного источника информации и прибегает к использованию файлов конфигурации, только если эти переменные не заданы. *`GIT_AUTHOR_NAME`* используется для указания имени автора коммита. @@ -73,13 +73,13 @@ Git использует некоторые переменные окружен *`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 будет использовать имя пользователя в системе и имя хоста. @@ -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`. @@ -112,11 +112,11 @@ Git использует библиотеку `curl` для работы с се *`GIT_MERGE_VERBOSITY`* задаёт уровень детализации вывода при рекурсивном слиянии. Возможные значения перечислены ниже: -* 0 не выводить ничего, кроме возможного единственного сообщения об ошибке. -* 1 выводить только конфликты. -* 2 также выводить изменения файлов. -* 3 показывать пропущенные файлы, в которых нет изменений. -* 4 выводить все пути в том же порядке как они обрабатываются. +* 0 -- не выводить ничего, кроме возможного единственного сообщения об ошибке; +* 1 -- выводить только конфликты; +* 2 -- также выводить изменения файлов; +* 3 -- показывать пропущенные файлы, в которых нет изменений; +* 4 -- выводить все пути в том же порядке, в котором они обрабатываются; * 5 и выше выводят подробную отладочную информацию. По умолчанию значение переменной равно 2. @@ -124,11 +124,11 @@ Git использует библиотеку `curl` для работы с се ==== Отладка Хотите знать что _на самом деле_ делает Git? -Git ведёт достаточно подробный логи выполняемых действий и всё что вам нужно -- включить их. +Git ведёт достаточно подробные логи выполняемых действий, и всё что вам нужно -- включить их. Возможные значения приведённых ниже переменных следующие: -* `true`, `1`, или `2` -- вывод осуществляется в стандартный поток ошибок (stderr). -* Абсолютный путь, начинающийся с `/` -- вывод будет производиться в указанный файл. +* `true`, `1`, или `2` -- вывод осуществляется в стандартный поток ошибок (stderr); +* абсолютный путь, начинающийся с `/`, -- вывод будет производиться в указанный файл. *`GIT_TRACE`* задаёт журналирование действий, не подпадающих под какую-либо определённую категорию. Это включает в себя раскрытие алиасов и вызовы внешних программ. @@ -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`. @@ -224,10 +224,10 @@ Git вызывает эту программу каждый раз, когда (Читайте подробнее в разделе <> главы 7.) *`GIT_NAMESPACE`* управляет доступом к ссылкам внутри пространств имён аналогично параметру `--namespace`. -Чаще всего эта переменная используется на стороне сервера когда вы хотите хранить несколько форков одного репозитория в нём же, разделяя лишь ссылки по пространствам имён. +Чаще всего эта переменная используется на стороне сервера, когда вы хотите хранить несколько форков одного репозитория в нём же, разделяя лишь ссылки по пространствам имён. *`GIT_FLUSH`* заставляет Git отключить буферизацию при записи в стандартный поток вывода `stdout`. -Git будет чаще сбрасывать данные на диск если значение выставлено в 1, если же оно равно 0 -- весь вывод будет буферизоваться. +Git будет чаще сбрасывать данные на диск, если значение выставлено в 1; если же оно равно 0, весь вывод будет буферизоваться. Если ничего не задано, по умолчанию используемое значение выбирается в зависимости от выполняемых действий и способа вывода данных. *`GIT_REFLOG_ACTION`* задаёт подробное описание, записываемое в reflog.