Настройка Git: имя, email, SSH и первый репозиторий
Прежде чем начать работать с Git, нужно один раз настроить окружение: указать имя и email, сгенерировать SSH-ключ, задать редактор и несколько полезных опций. Без этого первый же git push закончится ошибкой Permission denied, а коммиты будут подписаны как «unknown».
Настройка занимает 10-15 минут, но экономит часы в будущем. В этом уроке разберём всё по шагам.
Три уровня конфигурации
Git хранит настройки на трёх уровнях, каждый из которых переопределяет предыдущий:
# Системный (для всех пользователей ОС)
git config --system <key> <value>
# файл: /etc/gitconfig
# Глобальный (для текущего пользователя)
git config --global <key> <value>
# файл: ~/.gitconfig или ~/.config/git/config
# Локальный (для конкретного репозитория)
git config --local <key> <value>
# файл: .git/config в корне репозитория
Локальный уровень побеждает глобальный, глобальный - системный. Это полезно, когда у тебя рабочий и личный аккаунт: глобально ставишь личный email, а в рабочих репозиториях переопределяешь локально.
# Посмотреть все настройки и откуда они берутся
git config --list --show-origin
Имя и email
Каждый коммит содержит имя автора и email. Это не авторизация - Git не проверяет, что email настоящий. Но GitLab/GitHub привязывают коммиты к аккаунтам по email, поэтому важно указать тот же email, что в профиле на хостинге.
git config --global user.name "Dmitriy Popov"
git config --global user.email "user@example.com"
# Проверить
git config --global --list | grep user
# ~/.gitconfig
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
# ~/.gitconfig-work
[user]
name = "Dmitriy Popov"
email = "user@company.com"
Все репозитории внутри ~/work/ автоматически подхватят рабочий email.
Полезные глобальные настройки
# Редактор для коммит-сообщений (по умолчанию vim)
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "nano" # nano
# Ветка по умолчанию при git init
git config --global init.defaultBranch main
# pull --rebase по умолчанию (вместо merge)
git config --global pull.rebase true
# Цветной вывод
git config --global color.ui auto
# Автоматически убирать trailing whitespace при apply
git config --global apply.whitespace fix
# Показывать diff в редакторе при написании коммит-сообщения
git config --global commit.verbose true
Опция pull.rebase меняет поведение git pull: вместо merge-коммита Git переложит твои коммиты поверх свежего remote. Почему это обычно лучше - разбираем в уроке merge vs rebase.
Git aliases
Aliases сокращают длинные команды. Они сохраняются в ~/.gitconfig:
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.last "log -1 HEAD"
git config --global alias.unstage "reset HEAD --"
После этого git lg покажет красивый граф истории, а git st заменит git status. Что ещё умеет git log и как искать по истории - в уроке про log, blame и bisect.
SSH-ключ для GitLab/GitHub
SSH-ключ позволяет аутентифицироваться без ввода пароля при каждом push/pull.
Генерация ключа
# Ed25519 - современный и быстрый алгоритм
ssh-keygen -t ed25519 -C "gitlab:user@example.com"
# Если система не поддерживает Ed25519 (очень старый OpenSSH)
ssh-keygen -t rsa -b 4096 -C "gitlab:user@example.com"
При генерации можно задать passphrase - дополнительный пароль для ключа. Рекомендуется для безопасности.
Добавление ключа в ssh-agent
# Запустить агент
eval "$(ssh-agent -s)"
# Добавить ключ (на macOS - с сохранением в Keychain)
ssh-add ~/.ssh/id_ed25519 # Linux
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 # macOS
Добавление публичного ключа на хостинг
# Скопировать публичный ключ
cat ~/.ssh/id_ed25519.pub
# macOS: скопировать сразу в буфер обмена
pbcopy < ~/.ssh/id_ed25519.pub
Затем: GitLab → Settings → SSH Keys → вставить ключ.
Проверка подключения
ssh -T git@gitlab.com
# Ожидаемый ответ: Welcome to GitLab, @username!
ssh -T git@github.com
# Ожидаемый ответ: Hi username! You've successfully authenticated...
Несколько SSH-ключей (~/.ssh/config)
Если у тебя несколько аккаунтов (личный GitHub + рабочий GitLab), нужен файл ~/.ssh/config:
# Личный GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# Рабочий GitLab
Host gitlab.company.com
HostName gitlab.company.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Теперь git clone git@github.com:user/repo.git использует личный ключ, а git clone git@gitlab.company.com:team/project.git - рабочий.
GPG-подпись коммитов
GPG-подпись добавляет криптографическое подтверждение, что коммит действительно сделан тобой. На GitHub/GitLab такие коммиты получают зелёную плашку «Verified».
# Сгенерировать GPG-ключ
gpg --full-generate-key
# Выбрать RSA and RSA, 4096 бит, указать тот же email, что в Git
# Посмотреть ID ключа
gpg --list-secret-keys --keyid-format=long
# sec rsa4096/ABCDEF1234567890 ...
# Настроить Git
git config --global user.signingkey ABCDEF1234567890
git config --global commit.gpgsign true
# Экспортировать публичный ключ для GitLab/GitHub
gpg --armor --export ABCDEF1234567890
Первый репозиторий
mkdir hello-git && cd hello-git
git init
# Проверим, что всё настроено
git config user.name
git config user.email
# Создадим файл и сделаем первый коммит
echo "# Hello Git" > README.md
git add README.md
git commit -m "init: add README"
# Посмотреть историю
git log --oneline
Если нужно подключить удалённый репозиторий:
# Создай пустой репозиторий на GitLab/GitHub, затем:
git remote add origin git@gitlab.com:user/hello-git.git
git push -u origin main
Ещё до первого коммита стоит завести .gitignore, чтобы в репозиторий не уехали бинарники, .env и папки IDE - как его составить, разбираем в уроке про gitignore и секреты.
Типичные проблемы при настройке
Permission denied (publickey) - SSH-ключ не добавлен в ssh-agent или на хостинг. Проверь ssh-add -l и убедись, что публичный ключ добавлен в настройках GitLab/GitHub.
Author identity unknown - не настроены user.name и user.email. Git откажется делать коммит, пока не укажешь.
remote: Repository not found - неправильный URL remote или нет доступа. Проверь git remote -v и права в настройках репозитория.
Could not open a connection to your authentication agent - ssh-agent не запущен. Выполни eval "$(ssh-agent -s)".
Мини-задание
- Настрой
user.nameиuser.emailглобально - Добавь alias
git lgдля красивого графа истории - Сгенерируй SSH-ключ и добавь его в GitLab или GitHub
- Проверь подключение:
ssh -T git@gitlab.com(или github.com) - Создай репозиторий, сделай первый коммит и запушь на remote