Установка и первый репозиторий
Установи git, проверь его, затем разово задай личность через git config --global user.name и user.email, чтобы у каждого коммита был автор. Затем заведи репозиторий двумя способами: git init создаёт пустой .git на месте, git clone копирует существующий репозиторий с историей.
Теперь ты понимаешь, что записывает git и где живут твои файлы. Пора сделать это реальным на своей машине: установить инструмент, сказать ему, кто ты, и привести репозиторий к существованию. Это пятиминутная настройка раз на машину — но пропуск шага с личностью порождает коммиты с неверным или угаданным автором, и эту ошибку досадно чинить задним числом.
К концу этого урока ты сможешь проверить установку git, задать свою личность глобально, выбрать разумные значения по умолчанию и создать репозиторий двумя способами: с нуля через git init или копированием существующего через git clone.
После этого урока ты сможешь проверить, что git установлен, задать имя и email через git config —global, объяснить, почему каждому коммиту нужна личность, настроить ветку по умолчанию и редактор и описать разницу между git init и git clone.
Сначала убедись, что git установлен, и посмотри его версию. Почти каждая система либо поставляет git, либо устанавливает его одной командой (macOS: xcode-select --install или Homebrew; Debian/Ubuntu: apt install git; Windows: установщик Git for Windows). Проверь так:
git --version
# git version 2.45.2Если ты видишь номер версии, git готов. Точный номер редко важен для повседневной работы, но знание команды позволяет подтвердить установку на любой машине, за которую ты сядешь.
Задай свою личность один раз, глобально — каждый коммит записывает автора. Вспомни, что коммит хранит, кто его сделал. Git отказывается выдумывать это за тебя, так что ты говоришь ему своё имя и email единожды, и он автоматически штампует каждый будущий коммит:
git config --global user.name "Ada Lovelace"
git config --global user.email "ada@example.com"Флаг --global пишет это в твой пользовательский конфиг (~/.gitconfig), так что они применяются к каждому репозиторию, который ты трогаешь на этой машине. Без личности git заблокирует твой первый коммит и попросит её. Email важен: хостинги вроде GitHub сопоставляют коммиты с твоим аккаунтом по email коммита, так что используй адрес, который ты там реально используешь.
Задай ещё два полезных умолчания: имя начальной ветки и редактор. Новые репозитории исторически называли свою первую ветку master; современное умолчание в GitHub, GitLab и самом git — main. Зафиксируй его, чтобы каждый новый репозиторий был единообразен:
git config --global init.defaultBranch main
git config --global core.editor "code --wait" # или "vim", "nano" и т.д.core.editor — это программа, которую git открывает, когда ему нужно, чтобы ты написал текст: сообщение коммита без -m или интерактивный rebase. Установка её на редактор, который ты знаешь, избавляет от классической паники «застрял в vim». Ты можешь осмотреть всё, что настроил, так:
git config --list # показать все действующие настройки
git config user.email # показать одно значениеСоздай свежий репозиторий через git init. Запусти его внутри папки проекта, и git создаст единственный скрытый каталог .git — хранилище репозитория, с которым ты познакомился два урока назад. Твои существующие файлы не тронуты и поначалу неотслеживаемы.
mkdir my-project && cd my-project
git init
# Initialized empty Git repository in /…/my-project/.git/
git status
# On branch main
# No commits yet
# nothing to commit (create/copy files to get started).git держит всю историю и конфигурацию этого репозитория; файлы рядом с ним — твоё рабочее дерево. Первый git status в совершенно новом репозитории это подтверждает: ты на ветке main, пока без коммитов.
Или скопируй существующий репозиторий через git clone. Когда проект уже где-то живёт (сервер коллеги, GitHub), ты не делаешь init — ты клонируешь. git clone <url> скачивает весь репозиторий, включая всю его историю, и выписывает тебе рабочее дерево:
git clone https://github.com/git/git.git
# Cloning into 'git'...Разница — в точке старта. git init даёт тебе пустой репозиторий без коммитов, готовый к твоему первому. git clone даёт тебе полную копию чужого репозитория — каждый коммит, каждую ветку — потому что git распределённый, и каждый клон — это полный независимый репозиторий (мысль из урока 1).
▸Почему это работает
Почему настаивать на реальном email, а не оставить пустым или поддельным? Потому что личность автора постоянна, впечатана в содержимое каждого коммита. Хостинги приписывают вклад, blame и решения о доступе по email коммита — неверный адрес означает, что твои коммиты показываются как чужие или как «неизвестный», а переписывание истории, чтобы это починить позже, разрушительно на общей ветке. Задай его правильно один раз через --global, и проблема не возникнет. Если конкретному репозиторию нужна другая личность (скажем, рабочий email), задай её локально внутри этого репозитория через git config user.email "work@company.com" — локальное для репозитория значение перекрывает глобальное только для этого репозитория.
От чистой машины к рабочему репозиторию.
Ты садишься за свежий ноутбук и хочешь начать проект.
git --versionпечатаетgit version 2.45.2— установлен и готов.- Ты задаёшь свою личность один раз:
git config --global user.name "Ada Lovelace"иgit config --global user.email "ada@example.com". Ты также фиксируешь умолчания:git config --global init.defaultBranch main. - Ты создаёшь каркас проекта:
mkdir todo-app && cd todo-app, затемgit init. Git печатаетInitialized empty Git repository …/todo-app/.git/. git statusпоказываетOn branch main,No commits yet. Ты добавляешь файлREADME.md;git statusтеперь перечисляет его под Untracked files — ровно карта трёх областей из прошлого урока, теперь на реальном репозитории.
Если бы ты вместо этого захотел работать над существующим проектом, шаг 3 становится git clone <url>, и ты сразу переходишь к полностью заполненному рабочему дереву, где вся история уже на месте. В любом случае твоя личность с шага 2 будет автором каждого коммита, который ты сделаешь дальше.
▸Частая ошибка
Частая ошибка новичка: запуск git init внутри неверного каталога — например, твоей домашней папки или уже клонированного репозитория — создающий вложенный или раскинувшийся .git, которого ты не намеревался. git status и git rev-parse --show-toplevel (печатает корень репозитория) точно говорят, где граница репозитория. Если ты сделал git init где-то по ошибке и коммитов ещё нет, ты можешь просто удалить лишнее хранилище через rm -rf .git, и ты снова при обычных файлах. Всегда взгляни на свой текущий каталог перед git init.
В чём ключевая разница между git init и git clone?
Настройка git — это рутина раз на машину: проверь установку через git --version, затем задай свою личность — git config --global user.name и user.email — потому что каждый коммит записывает автора, и git не станет его угадывать. Зафиксируй разумные умолчания через init.defaultBranch main и core.editor и осматривай что угодно через git config --list. Затем приведи репозиторий к существованию одним из двух способов: git init создаёт новый пустой репозиторий (свежий каталог .git на месте, пока без коммитов), а git clone <url> копирует существующий репозиторий со всей его историей и выписывает рабочее дерево — это возможно, потому что каждый клон git — полный независимый репозиторий. Теперь у тебя установлен git, задана личность и есть реальный репозиторий на диске, готовый записать свой первый коммит.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.