git basic

git init

Создать новый пустой репозиторий Git или инициализировать существующий

Описание

git init — это первая команда, с которой начинается работа с Git. Она создаёт скрытую директорию .git/ в текущей папке, в которой хранится вся история, объекты, ссылки и конфигурация репозитория. После выполнения команды директория становится полноценным Git-репозиторием.

Команду можно вызвать двумя способами: внутри уже существующей директории проекта (тогда репозиторий инициализируется «на месте») или с указанием имени новой директории — тогда Git сам создаст папку и инициализирует в ней репозиторий. Повторный вызов git init в уже существующем репозитории безопасен: он обновляет шаблоны, не удаляя историю.

Для серверного использования, когда рабочая копия не нужна, применяют «голый» репозиторий (--bare): он содержит только содержимое .git/ без рабочего дерева и используется как центральный репозиторий для пушей и пулов.

Синтаксис

git init [ОПЦИИ] [<директория>]

Примеры форм вызова:

# В текущей директории git init # Создать и инициализировать новую директорию git init my-project # Создать голый репозиторий git init --bare repo.git # Задать ветку по умолчанию git init -b main my-project

Флаги и опции

ФлагОписание
--bareСоздать «голый» репозиторий без рабочего дерева. Используется для серверных репозиториев (центральных хостов).
-b <имя>Задать имя начальной ветки (вместо master по умолчанию). Например: -b main. Требует Git ≥ 2.28.
--initial-branch=<имя>Длинная форма флага -b.
--template=<путь>Использовать указанный каталог как шаблон для содержимого .git/. По умолчанию используется /usr/share/git-core/templates.
--shared[=<режим>]Разрешить совместный доступ нескольким пользователям к репозиторию. Режимы: false, true (=group), umask, all, world, everybody.
--quiet / -qПодавить вывод сообщений (только ошибки и предупреждения).
--object-format=<формат>Задать формат хеш-объектов: sha1 (по умолчанию) или sha256 (экспериментально, Git ≥ 2.29).
--separate-git-dir=<путь>Создать файл-ссылку .git, указывающую на внешний каталог. Удобно хранить .git/ вне рабочего дерева.

Паттерны использования

Начать новый проект

mkdir my-project
cd my-project
git init -b main
echo "# My Project" > README.md
git add README.md
git commit -m "feat: initial commit"

Инициализировать существующий проект

cd /path/to/existing-project
git init -b main
git add .
git commit -m "feat: initial commit"
git remote add origin git@github.com:user/repo.git
git push -u origin main

Создать голый репозиторий (сервер)

# На сервере
mkdir /srv/repos/myapp.git
git init --bare /srv/repos/myapp.git

# На клиенте
git remote add origin user@server:/srv/repos/myapp.git
git push -u origin main

Хранить .git/ вне рабочей директории

# Полезно для конфигурационных файлов (dotfiles)
git init --separate-git-dir=$HOME/.dotfiles-git $HOME
# .git → $HOME/.dotfiles-git (реальное хранилище)
# $HOME/.git → файл-ссылка

Советы и подводные камни

Совет: настройте имя ветки глобально
Вместо того чтобы каждый раз указывать -b main, задайте глобальный параметр один раз:
git config --global init.defaultBranch main
Тогда git init будет создавать ветку main автоматически.
Совет: повторный git init безопасен
Если запустить git init в уже существующем репозитории, Git обновит шаблоны и выведет сообщение «Reinitialized existing Git repository». История и коммиты при этом не удаляются.
Внимание: не инициализируйте репозиторий внутри другого
Если выполнить git init внутри уже существующего репозитория, создастся вложенный (submodule-like) репозиторий. Git не предупредит об ошибке, но это вызовет путаницу. Проверяйте: git rev-parse --show-toplevel.