Настройка Git: user, editor, default branch
Git без настройки не позволит сделать ни одного коммита. Минимум нужен ваш user.name и user.email — без них первый же git commit остановится с ошибкой «please tell me who you are». Кроме обязательного — есть полезные настройки, которые экономят часы за карьеру. В этом уроке настроим всё, что нужно для нормальной работы.
После урока у вас будет правильно настроенный Git: правильное имя автора, нормальный default branch (main), безопасный pull-режим (ff-only), и понимание, где хранятся настройки и как их менять.
Уровни конфигурации: system, global, local
Git хранит конфигурацию на трёх уровнях:
На практике 90% настроек — --global. На уровне --local обычно держат то, что специфично для проекта: другой email (если работаете в нескольких компаниях), специфический gpg-ключ, особые алиасы.
# Установить глобально
git config --global user.name "Ivan Petrov"
# Установить локально (только для текущего репо)
git config --local user.email "[email protected]"
Обязательные настройки
1. Имя автора
git config --global user.name "Иван Петров"
Это имя попадёт во все ваши коммиты как Author. Будет видно в git log, на GitHub, в blame. Пишите так, как хотите, чтобы вас идентифицировали — обычно реальное имя или ник. Кириллица работает (Git хранит в UTF-8), но многие команды используют латиницу для совместимости с международными командами и tooling.
2. Email автора
git config --global user.email "[email protected]"
Используется для:
- Идентификации в
git log - Связки с аккаунтом на GitHub/GitLab (чтобы коммиты светились в вашем профиле)
- Email-уведомлений в проектах, где они настроены
Если вы коммитите личный email в публичные репозитории — он становится публичным навсегда. Боты собирают email из commit-истории. Решение: используйте GitHub-noreply email вида [email protected] (найдёте в настройках GitHub — Email -> Keep my email private). Подробно про privacy — в модуле 18.
Для рабочих и личных репозиториев имеет смысл иметь два email: рабочий — на корпоративный gmail, личный — на GitHub no-reply. Переключаемся через --local в рабочих репозиториях.
3. Default branch name
git config --global init.defaultBranch main
С 2020 года индустриальный стандарт — называть основную ветку main, а не master. Без этой настройки git init создаст ветку с именем по умолчанию (которое в Git 2.28+ ещё master, если не настроено иначе). GitHub, GitLab, Bitbucket — все используют main по умолчанию для новых репозиториев.
Просто примите как факт: новые проекты — main. Старые legacy-проекты могут остаться на master, и это нормально (переименовать можно, но не критично).
4. Editor для commit messages
Когда вы делаете git commit без -m "сообщение", Git открывает редактор. По умолчанию это vim или vi — что бесит junior, не знающих vim. Поставьте редактор, который вы знаете:
# VS Code (если установлен и в PATH):
git config --global core.editor "code --wait"
# Sublime Text:
git config --global core.editor "subl -n -w"
# Nano (есть везде в Linux):
git config --global core.editor "nano"
# Vim (если знаете):
git config --global core.editor "vim"
Опция --wait для VS Code говорит «не возвращай управление, пока окно не закроется». Без неё Git подумает, что вы сразу закрыли редактор, и не сохранит сообщение.
Если случайно открыли vim и не знаете, как выйти: нажмите Escape, потом наберите :q! (двоеточие, q, восклицательный знак), нажмите Enter. Это «выйти без сохранения». Самая важная команда vim для тех, кто vim не знает.
Рекомендуемые настройки
Pull rebase или merge
Самая спорная настройка Git: что делать, когда git pull тянет изменения с сервера, а у вас есть локальные коммиты, ещё не пушенные?
Варианта три:
Для junior рекомендую:
git config --global pull.ff only
Это означает: git pull будет работать только в случае, когда возможен fast-forward (линейное движение HEAD). При расхождении истории — Git попросит вас решить руками: либо git pull --rebase, либо git pull --no-ff (merge), либо разобрать ситуацию иначе.
Эта настройка спасает от случайных merge commits — самой частой ошибки junior.
Push default
git config --global push.default simple
С Git 2.0 это default, поэтому установка не обязательна. Означает: git push без аргументов пушит только текущую ветку в одноимённую remote-ветку. Безопасно.
Auto color
git config --global color.ui auto
В Git 1.8+ это уже default, но не помешает поставить явно. Цветной output git status, git diff, git log — удобнее читать.
Default rename detection
git config --global diff.renames copies
Заставляет Git распознавать не только переименования, но и копирования файлов в diff-выводе. Полезно при рефакторинге.
Аутокоррекция
git config --global help.autocorrect 1
Если опечатались (например, git statsu), Git предложит правильный вариант и даже выполнит через секунду. Полезно для junior. Опытные часто отключают, чтобы не делать неожиданные операции.
Полный пример настройки
Минимальный набор для свежей машины:
# Идентификация
git config --global user.name "Иван Петров"
git config --global user.email "[email protected]"
# Дефолты
git config --global init.defaultBranch main
git config --global pull.ff only
git config --global core.editor "code --wait"
# Удобства
git config --global color.ui auto
git config --global diff.renames copies
git config --global help.autocorrect 1
Запустите эти команды один раз — и Git готов к работе.
Просмотр текущей конфигурации
Посмотреть все настройки:
git config --list
# user.name=Ivan Petrov
# [email protected]
# init.defaultbranch=main
# pull.ff=only
# core.editor=code --wait
# ...
С указанием, откуда взялась настройка:
git config --list --show-origin
# file:/Users/ivan/.gitconfig user.name=Ivan Petrov
# file:/Users/ivan/.gitconfig [email protected]
# file:.git/config [email protected]
# (local перебил global для этого репозитория)
Получить одну настройку:
git config user.email
# [email protected]
git config --global user.email
# [email protected] (только из global)
Удалить настройку:
git config --global --unset help.autocorrect
Где это всё хранится
Поскольку git config — это просто удобный CLI поверх текстового файла, можно открыть .gitconfig прямо в редакторе.
Откройте ~/.gitconfig в редакторе:
cat ~/.gitconfig
Увидите примерно:
[user]
name = Ivan Petrov
email = [email protected]
[init]
defaultBranch = main
[pull]
ff = only
[core]
editor = code --wait
Можете править этот файл руками — то же самое, что через git config --global. INI-формат: секции в [квадратных скобках], ключи name = value.
Алиасы — экономия пальцев
Можно создавать сокращения для длинных команд:
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --decorate --all"
Теперь:
git st # = git status
git lg # = git log --oneline --graph --decorate --all
Алиасы — личное дело. Кому-то нравится git ci вместо commit, кому-то — git unstage для git reset HEAD. Поэкспериментируйте, найдите, что нравится. Главное — не злоупотреблять, иначе на чужой машине теряетесь.
Популярный alias для красивого лога:
git config --global alias.tree \
"log --graph --pretty=format:'%C(yellow)%h%Creset -%C(red)%d%Creset %s %C(green)(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# Использование:
git tree
Покажет цветной граф истории с ветками. Очень красиво для презентаций и приятно ежедневно.
Conditional includes — отдельные конфиги для проектов
Продвинутая фишка: Git 2.13+ позволяет включать дополнительные конфиги по условию. Например, рабочие проекты в ~/work/ используют рабочий email, личные в ~/projects/ — личный:
# ~/.gitconfig
[user]
name = Ivan Petrov
email = [email protected]
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
# ~/.gitconfig-work
[user]
email = [email protected]
[user]
signingkey = ABC123...
Когда вы в любом репо внутри ~/work/, Git подтянет рабочий конфиг автоматически. Удобно для людей с несколькими работами / контрактами / open-source-активностями.
Попробуй сам
- Настройте Git минимально:
git config --global user.name "Ваше Имя"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global pull.ff only
- Проверьте конфиг:
git config --list --show-origin
- Откройте
~/.gitconfigв редакторе и посмотрите INI-формат:
cat ~/.gitconfig
- Создайте тестовый алиас:
git config --global alias.lg "log --oneline --graph --all"
В следующих модулях у нас уже будет, в каком репозитории его проверить.
Абсолютные и относительные пути .env и pydantic-settings: конфигурация без захардкоженных паролей