$ sudo teach IT
Модуль 1 · Знакомство · Урок 1.4

Настройка Git

Вы укажете Git своё имя и почту, главную ветку main и редактор для сообщений.

Теория + практика~20 минутНовичокgit config.gitconfig

Кто вы для Git

Настройка Git — это несколько команд git config, которые один раз записывают в файл ~/.gitconfig ваше имя, почту, имя главной ветки и редактор. Из урока вы выполните эти команды и научитесь проверять, что именно записал Git.

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

Терминал
$ git config --global user.name "Алекс Иванов"
$ git config --global user.email "alex@example.com"

Разбор по строкам

  • git config — прочитать или записать настройку Git
  • --global — для всех ваших проектов: значение попадёт в файл ~/.gitconfig в вашей домашней папке
  • user.name — название настройки: раздел user, параметр name
  • "Алекс Иванов" — значение. Кавычки нужны, потому что в нём есть пробел

Подставьте свои имя и почту. Почту лучше взять ту же, что вы укажете при регистрации на GitHub: по ней GitHub узнаёт ваши коммиты и привязывает их к профилю. Если не хотите показывать настоящую почту, у GitHub есть скрытый адрес — разберём его, когда заведём аккаунт.

Имя и почта видны другим

Они записываются в каждый ваш коммит, а когда вы выложите проект на GitHub, увидеть их сможет любой, у кого есть доступ к проекту. Это обычная практика, но учитывайте её при выборе почты.

В новых версиях есть и запись git config set --global user.name "..." — результат тот же. Мы пишем привычный вид без set: он работает везде.

Ветка main по умолчанию

У каждого проекта в Git есть главная ветка (англ. branch) — основная линия истории. О ветках поговорим позже, сейчас важно только имя. Исторически Git называл её master, сегодня почти везде принято main, в том числе на GitHub.

Но Git 2.56 всё ещё создаёт master и печатает подсказку при каждом новом проекте, пока ему не сказать иначе:

Терминал
$ git config --global init.defaultBranch main

init.defaultBranch — имя ветки, которую Git создаст в новом проекте. Без неё вы увидите такую подсказку (в разных версиях текст чуть отличается):

Вывод
hint: Using 'master' as the name for the initial branch. This default branch name
hint: will change to "main" in Git 3.0. To configure the initial branch name
hint: to use in all of your new repositories, which will suppress this warning,
hint: call:
...

Редактор для сообщений

Иногда Git сам открывает текстовый редактор, например чтобы вы написали сообщение к коммиту. По умолчанию это системный редактор, часто Vim — мощный, но для новичка непонятный. Укажем свой:

Терминал
$ git config --global core.editor "code --wait"

core.editor — настройка «каким редактором пользоваться». code --wait — запуск VS Code с флагом --wait («ждать»): VS Code не вернёт управление Git, пока вы не закроете файл, иначе Git решил бы, что сообщение пустое. Команда code должна работать в терминале (мы настраивали её в уроке про установку).

Нет VS Code? Возьмите простой редактор nano (он есть на macOS, Linux и в Git Bash):

Терминал
$ git config --global core.editor "nano"

Как выйти из Vim

Если всё же открылся Vim и вы не знаете, как закрыть окно: нажмите Esc, затем введите :q! и нажмите Enter — это выход без сохранения. Чтобы сохранить и выйти, введите :wq и Enter.

Как Git забирает чужие правки

Когда вы начнёте работать с GitHub, вы будете забирать оттуда правки командой git pull. Если разные правки появились и у вас, и в интернете, Git должен знать, как их объединить:

Терминал
$ git config --global pull.rebase false

Значение false означает «объединять обычным слиянием» — самый понятный способ; подробности позже. Без настройки git pull в такой ситуации остановился бы с ошибкой fatal: Need to specify how to reconcile divergent branches. («нужно указать, как согласовать разошедшиеся ветки»).

Где хранятся настройки

Все настройки лежат в обычных текстовых файлах. Увидеть, что записано и откуда, можно одной командой:

Терминал
$ git config --list --show-origin
file:/Users/alex/.gitconfig	user.name=Алекс Иванов
file:/Users/alex/.gitconfig	user.email=alex@example.com
file:/Users/alex/.gitconfig	init.defaultbranch=main
file:/Users/alex/.gitconfig	core.editor=code --wait
file:/Users/alex/.gitconfig	pull.rebase=false

--list показывает все настройки, а --show-origin добавляет файл, откуда взято каждое значение (в новых версиях Git то же пишут как git config list). Git пишет названия строчными буквами: init.defaultbranch — та же настройка. А вот что лежит в самом файле:

Конфиг · ~/.gitconfig
[user]
	name = Алекс Иванов
	email = alex@example.com
[init]
	defaultBranch = main
[core]
	editor = code --wait
[pull]
	rebase = false

Файл можно править руками. Настройки бывают трёх уровней, и более близкий к проекту побеждает:

УровеньФлагГде лежитНа что влияет
global--global~/.gitconfigНа все ваши проекты (наш выбор)
localбез флага, внутри проекта.git/config проектаТолько на один проект
system--systemв папке установки GitНа всех пользователей компьютера

Локальный уровень пригодится, если в одном проекте нужна другая почта: выполните там git config user.email ... без --global.

Переводы строк на Windows

Windows и macOS/Linux обозначают конец строки в файле по-разному, из-за чего при совместной работе появляются лишние различия. Настройка core.autocrlf сглаживает разницу.

  • Windows. Если вы оставили установщик по умолчанию, значение уже стоит true. Проверка: git config core.autocrlf печатает true.
  • macOS и Linux. Рекомендуемое значение — input: git config --global core.autocrlf input.

Git 3.0 уже на подходе, но не вышел

Следующая большая версия Git сделает main веткой по умолчанию и сменит способ вычисления идентификаторов коммитов. Дата выхода пока не назначена; настройки и команды курса останутся рабочими.

Практика у себя

Выполните настройки по шагам. Имя и почту подставьте свои.

Шаг 1. Представьтесь Git (команды ничего не печатают):

Терминал
$ git config --global user.name "Алекс Иванов"
$ git config --global user.email "alex@example.com"

Шаг 2. Задайте ветку, редактор и способ объединения правок. Если у вас нет VS Code, вместо code --wait подставьте nano:

Терминал
$ git config --global init.defaultBranch main
$ git config --global core.editor "code --wait"
$ git config --global pull.rebase false

Шаг 3. Только для macOS и Linux:

Терминал
$ git config --global core.autocrlf input

Шаг 4. Проверьте, что записал Git. Вы должны увидеть свои значения (на Windows в списке будут ещё строки из системного файла установщика):

Терминал
$ git config --list --show-origin
file:/Users/alex/.gitconfig	user.name=Алекс Иванов
file:/Users/alex/.gitconfig	user.email=alex@example.com
file:/Users/alex/.gitconfig	init.defaultbranch=main
file:/Users/alex/.gitconfig	core.editor=code --wait
file:/Users/alex/.gitconfig	pull.rebase=false
file:/Users/alex/.gitconfig	core.autocrlf=input

Проверьте себя

  • В выводе git config --list --show-origin есть ваши user.name и user.email и строка init.defaultbranch=main.
  • Папка ~/projects/portfolio по-прежнему пуста: она ещё не репозиторий.

Частые ошибки

Что видноПочемуЧто делать
В user.name только «Алекс», фамилии нет, хотя ошибки не былоЗабыли кавычки (или поставили не прямые, а «ёлочки» из мессенджера): Git принял «Иванов» за отдельный аргументПовторите команду с обычными прямыми кавычками — она перезапишет значение
Опечатка в почтеКоммиты не привяжутся к вашему профилю GitHubВыполните команду заново с верной почтой; уже сделанные коммиты сохранят старую
fatal: not in a git directoryЗабыли --global вне проекта: локальная настройка требует репозиторияДобавьте --global
Author identity unknown при первом коммитеИмя и почта не заданыВыполните команды из первого раздела урока

Git отвечает по-русски?

Если в системе выбран русский язык (бывает на Linux и macOS), Git может писать сообщения на русском. Смысл тот же: «Текущая ветка: main» — это On branch main, «Еще нет коммитов» — No commits yet. В курсе выводы английские, так их проще искать в интернете. Английский ответ на одну команду: LC_ALL=C git status.

Что важно запомнить

  • Настройка Git — это команды git config --global ключ значение; они записываются в ~/.gitconfig.
  • Имя и почта подписывают каждый ваш коммит; значения с пробелом берите в кавычки.
  • init.defaultBranch main задаёт имя главной ветки в новых проектах.
  • core.editor задаёт редактор для сообщений; pull.rebase false — способ объединения правок при git pull.
  • Проверить всё можно командой git config --list --show-origin.

Инструменты готовы: Git установлен, терминал знаком, папка проекта ждёт. В следующем модуле мы превратим папку portfolio в репозиторий и сделаем первый коммит.

На следующий урок