Кажется, что установить Git - дело на две минуты: скачать, прокликать, готово. Но именно на этом шаге рождается половина будущих страданий. Установил с дефолтами - и через неделю ловишь дикие диффы, где "изменился весь файл" хотя ты поправил одну строку. Сделал первый коммит - а он подписан непонятным именем вроде DESKTOP-7F3K2\Admin, и теперь твоя история навсегда замусорена. Создал репозиторий - а ветка называется master, хотя весь проект на main, и push улетает не туда.
Все это - последствия того, что Git поставили и не настроили. В этом уроке мы поставим Git на все три системы по-человечески, разберемся, где он хранит свои настройки и почему их три уровня, а не один, и сделаем ту базовую конфигурацию, которую профессионалы прописывают один раз на новой машине и забывают. Новичку дам мягко и по шагам, опытному - пару вещей, которые в 2026 году поменялись и о которых половина статей в интернете врет.

Установить Git: Windows, macOS, Linux
Git - это не одна программа, а набор утилит плюс библиотека. На разных системах его удобнее ставить разными способами. Разберем по очереди.
Windows. Тут нужно скачать дистрибутив Git for Windows с сайта git-scm.com (раздел Downloads). Это не "официальный Git от компании Git" - такой компании нет, Git разрабатывает сообщество. Git for Windows - это сборка, которая тащит за собой не только сам git.exe, но и целое мини-окружение в стиле Unix. Что туда входит:
- сам Git;
- Git Bash - терминал с эмуляцией bash и набором юниксовых утилит (ls, grep, ssh, curl). Это важно: в Windows нет родного bash, а почти вся документация Git и туториалы написаны под него. Git Bash дает тебе ту же командную строку, что у коллег на маке и линуксе;
- Git GUI и графический просмотрщик истории gitk (legacy, но работают);
- интеграцию в проводник (пункты "Git Bash Here" по правому клику);
- credential manager для хранения паролей и токенов.
После установки открываешь Git Bash (или обычный PowerShell - git.exe доступен и там) и проверяешь:
Код: Выделить всё
$ git --version
git version 2.54.0.windows.1
macOS. Тут два пути. Простой - поставить инструменты разработчика Apple, в которые входит Git:
Код: Выделить всё
$ xcode-select --install
Код: Выделить всё
$ brew install git
$ git --version
git version 2.54.0
Linux. Тут все зависит от дистрибутива и его пакетного менеджера. Никаких инсталляторов - одна строка в терминале:
Код: Выделить всё
# Debian, Ubuntu, Mint
$ sudo apt update && sudo apt install git
# Fedora, RHEL, Rocky, Alma
$ sudo dnf install git
# Arch, Manjaro
$ sudo pacman -S git
Где Git хранит настройки: три уровня system, global, local
Прежде чем настраивать, надо понять модель. Любая настройка Git живет в одном из трех текстовых файлов, и они образуют иерархию по приоритету. Это и есть ответ на вопрос "почему моя настройка не применилась" - ее перебил файл уровнем ниже.
- system - один файл на всю машину, для всех пользователей. Лежит обычно в /etc/gitconfig (на Windows внутри каталога установки Git). Правится с флагом --system и требует прав администратора. Трогают редко.
- global - твой личный конфиг, один на пользователя. Файл ~/.gitconfig (или ~/.config/git/config). Флаг --global. Сюда идет 99% твоей ручной настройки: имя, почта, редактор, алиасы.
- local - конфиг конкретного репозитория. Файл .git/config внутри проекта. Флаг --local или просто без флага, если ты стоишь внутри репо. Перебивает global. Сюда кладут то, что специфично для одного проекта - например, рабочую почту для рабочего репо, когда личная стоит в global.
Код: Выделить всё
$ git config --list --show-origin
file:/etc/gitconfig core.autocrlf=input
file:/home/user/.gitconfig user.name=Ivan Petrov
file:/home/user/.gitconfig user.email=ivan@example.com
file:.git/config user.email=ivan@work-corp.com
Настройка Git: имя, почта, редактор
Минимум, без которого Git будет ругаться на каждый коммит, - представиться. Имя и почта вшиваются в каждый коммит как авторство, это не логин и не пароль, а просто подпись в истории. Ставим глобально:
Код: Выделить всё
$ git config --global user.name "Ivan Petrov"
$ git config --global user.email "ivan@example.com"
Дальше - редактор. Git открывает его, когда тебе надо написать сообщение коммита, разрешить конфликт или отредактировать список при интерактивном rebase. По умолчанию на Unix это часто Vim, и новичок, не зная как из него выйти (:q!, кстати), впадает в панику. Ставим что-то привычное:
Код: Выделить всё
# VS Code (флаг --wait обязателен, иначе Git решит, что ты закрыл редактор мгновенно)
$ git config --global core.editor "code --wait"
# Nano - простой консольный, есть почти везде
$ git config --global core.editor "nano"
Код: Выделить всё
$ git config --global core.editor
code --wait
А вот тут - самый частый источник путаницы, и здесь интернет массово устарел. Когда ты делаешь git init, Git создает первую ветку. Долгое время она называлась master. Сообщество движется к main, и многие думают, что Git уже сам так делает. Это неправда для ванильного Git в 2026 году. Чистый Git серии 2.54 по-прежнему создает ветку master и при этом печатает предупреждение:
Код: Выделить всё
$ git init demo
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
...
Initialized empty Git repository in /home/user/demo/.git/
Код: Выделить всё
$ git config --global init.defaultBranch main
Удобства: color.ui и help.autocorrect
Пара мелочей, которые делают жизнь приятнее. Цветной вывод (зеленые добавления, красные удаления в диффах) в современном Git включен в режиме auto по умолчанию, но если вывод вдруг черно-белый, можно задать явно:
Код: Выделить всё
$ git config --global color.ui auto
Код: Выделить всё
$ git config --global help.autocorrect 20
$ git stauts
WARNING: You called a Git command named 'stauts', which does not exist.
Continuing in 2.0 seconds, assuming that you meant 'status'.
Окончания строк: core.autocrlf и почему в 2026 лучше .gitattributes
Та самая боль про "изменился весь файл". Корень в том, что Windows исторически завершает строки парой символов CRLF (возврат каретки плюс перевод строки), а Unix и macOS - одним LF. Если в команде кто-то на Windows, а кто-то на маке, и настройки разные, Git может видеть невидимую разницу в каждой строке файла и показывать его целиком как измененный.
Классическое лечение - core.autocrlf. На Windows ставят true (при коммите CRLF превращается в LF, при выгрузке обратно в CRLF), на macOS/Linux - input (только при коммите CRLF режется в LF, обратного преобразования нет):
Код: Выделить всё
# Windows
$ git config --global core.autocrlf true
# macOS, Linux
$ git config --global core.autocrlf input
SSH-ключ и credential helper - коротко
Чтобы push/pull на GitHub/GitLab не спрашивал пароль каждый раз, есть два пути. Первый - SSH-ключ. Генерируешь пару ключей, публичную половину добавляешь в настройки своего аккаунта на хостинге:
Код: Выделить всё
$ ssh-keygen -t ed25519 -C "ivan@example.com"
Код: Выделить всё
$ git config --global credential.helper store
Типичные грабли
- Забыл user.email - и коммиты "ничьи". Git подставит автоопределенную почту вида user@hostname, и на хостинге коммиты не привяжутся к профилю. Всегда проверяй git config user.email перед первым коммитом в новом окружении.
- Настройка "не работает", потому что ее перебивает local. Поставил почту в global, а в репо коммиты идут с другой - значит в .git/config есть свой user.email. Диагностика - git config --list --show-origin.
- Ждал main, получил master. Не выставил init.defaultBranch=main и думал, что Git сам. Нет, ванильный Git 2.54 этого не делает - main будет дефолтом только с 3.0.
- code --wait без --wait. Без флага --wait Git думает, что редактор закрылся сразу, и берет пустое сообщение. Коммит срывается или уходит пустым.
- Правил ~/.gitconfig руками и сломал синтаксис. Лишняя скобка в имени секции - и Git перестает читать весь файл. Безопаснее через git config.
Повтори руками по шагам в своем терминале:
- Проверь установку: git --version. Если команды нет - поставь Git способом для своей ОС из этого урока.
- Представься: git config --global user.name "Твое Имя" и git config --global user.email "твоя@почта".
- Поставь main дефолтом: git config --global init.defaultBranch main.
- Задай редактор: git config --global core.editor "nano" (или "code --wait").
- Включи автокоррекцию мягко: git config --global help.autocorrect prompt.
- Посмотри весь конфиг с источниками: git config --list --show-origin. Найди свои строки.
- Создай тестовый репо: git init lab-test и зайди в него. Убедись, что ветка называется main: git branch --show-current.
- Поставь в этом репо отдельную почту: git config user.email "local@test.com" (без --global!) и снова посмотри git config --show-origin user.email - увидишь, что значение взято из .git/config, а не из ~/.gitconfig.
- Какие три уровня конфигурации есть у Git, в каких файлах они лежат и кто кого перебивает?
- Почему в 2026 году после git init без настройки ты получаешь ветку master, а не main, и как это исправить раз и навсегда?
- Чем core.autocrlf уступает подходу через .gitattributes для команды?
- Зачем редактору VS Code нужен флаг --wait в core.editor?
Ты поставил Git под свою ОС, проверил версию и сделал базовую настройку, которую профи прописывают один раз на новой машине: имя, почта, редактор, main как ветка по умолчанию, удобства вроде автокоррекции. Главное, что ты теперь понимаешь модель трех уровней system/global/local и можешь диагностировать "почему настройка не применилась" через --show-origin. Это фундамент - дальше будем делать первые коммиты, и благодаря этой настройке твоя история сразу будет чистой и подписанной правильно.