git init
Создать новый пустой репозиторий Git или инициализировать существующий
Описание
git init — это первая команда, с которой начинается работа с Git. Она создаёт скрытую директорию .git/ в текущей папке, в которой хранится вся история, объекты, ссылки и конфигурация репозитория. После выполнения команды директория становится полноценным Git-репозиторием.
Команду можно вызвать двумя способами: внутри уже существующей директории проекта (тогда репозиторий инициализируется «на месте») или с указанием имени новой директории — тогда Git сам создаст папку и инициализирует в ней репозиторий. Повторный вызов git init в уже существующем репозитории безопасен: он обновляет шаблоны, не удаляя историю.
Для серверного использования, когда рабочая копия не нужна, применяют «голый» репозиторий (--bare): он содержит только содержимое .git/ без рабочего дерева и используется как центральный репозиторий для пушей и пулов.
Синтаксис
- <директория> — необязательный путь к новой или существующей директории. Если не указан, инициализируется текущая директория.
- ОПЦИИ — флаги, изменяющие поведение (см. таблицу ниже).
Примеры форм вызова:
Флаги и опции
| Флаг | Описание |
|---|---|
--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 обновит шаблоны и выведет сообщение «Reinitialized existing Git repository». История и коммиты при этом не удаляются.
Если выполнить
git init внутри уже существующего репозитория, создастся вложенный (submodule-like) репозиторий. Git не предупредит об ошибке, но это вызовет путаницу. Проверяйте: git rev-parse --show-toplevel.