open atlas
↑ К треку
Git: от нуля до сеньора GIT · 01 · 04

Установка и первый репозиторий

Установи git, проверь его, затем разово задай личность через git config --global user.name и user.email, чтобы у каждого коммита был автор. Затем заведи репозиторий двумя способами: git init создаёт пустой .git на месте, git clone копирует существующий репозиторий с историей.

GIT Основы ◷ 15 min
Уровень
ОсновыJuniorMiddleSenior

Теперь ты понимаешь, что записывает git и где живут твои файлы. Пора сделать это реальным на своей машине: установить инструмент, сказать ему, кто ты, и привести репозиторий к существованию. Это пятиминутная настройка раз на машину — но пропуск шага с личностью порождает коммиты с неверным или угаданным автором, и эту ошибку досадно чинить задним числом.

К концу этого урока ты сможешь проверить установку git, задать свою личность глобально, выбрать разумные значения по умолчанию и создать репозиторий двумя способами: с нуля через git init или копированием существующего через git clone.

Цель

После этого урока ты сможешь проверить, что git установлен, задать имя и email через git config —global, объяснить, почему каждому коммиту нужна личность, настроить ветку по умолчанию и редактор и описать разницу между git init и git clone.

1

Сначала убедись, что git установлен, и посмотри его версию. Почти каждая система либо поставляет git, либо устанавливает его одной командой (macOS: xcode-select --install или Homebrew; Debian/Ubuntu: apt install git; Windows: установщик Git for Windows). Проверь так:

git --version
# git version 2.45.2

Если ты видишь номер версии, git готов. Точный номер редко важен для повседневной работы, но знание команды позволяет подтвердить установку на любой машине, за которую ты сядешь.

2

Задай свою личность один раз, глобально — каждый коммит записывает автора. Вспомни, что коммит хранит, кто его сделал. Git отказывается выдумывать это за тебя, так что ты говоришь ему своё имя и email единожды, и он автоматически штампует каждый будущий коммит:

git config --global user.name "Ada Lovelace"
git config --global user.email "ada@example.com"

Флаг --global пишет это в твой пользовательский конфиг (~/.gitconfig), так что они применяются к каждому репозиторию, который ты трогаешь на этой машине. Без личности git заблокирует твой первый коммит и попросит её. Email важен: хостинги вроде GitHub сопоставляют коммиты с твоим аккаунтом по email коммита, так что используй адрес, который ты там реально используешь.

3

Задай ещё два полезных умолчания: имя начальной ветки и редактор. Новые репозитории исторически называли свою первую ветку 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       # показать одно значение
4

Создай свежий репозиторий через 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, пока без коммитов.

5

Или скопируй существующий репозиторий через 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" — локальное для репозитория значение перекрывает глобальное только для этого репозитория.

Разбор примера

От чистой машины к рабочему репозиторию.

Ты садишься за свежий ноутбук и хочешь начать проект.

  1. git --version печатает git version 2.45.2 — установлен и готов.
  2. Ты задаёшь свою личность один раз: git config --global user.name "Ada Lovelace" и git config --global user.email "ada@example.com". Ты также фиксируешь умолчания: git config --global init.defaultBranch main.
  3. Ты создаёшь каркас проекта: mkdir todo-app && cd todo-app, затем git init. Git печатает Initialized empty Git repository …/todo-app/.git/.
  4. 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-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.