↓Перейти к содержанию
  1. Git: руководства и команды/

git init: как инициализировать Git репозиторий

·5 минут·

Команда git init — первый шаг при создании нового проекта с Git. Она превращает обычную папку в Git-репозиторий: создаёт скрытую папку .git со всей необходимой инфраструктурой для отслеживания файлов. Эта статья объяснит что делает git init, покажет разные варианты использования и расскажет про git init --bare для серверных репозиториев.

Что делает git init #

Одна команда — несколько действий:

git init

Git создаёт скрытую папку .git в текущей директории и наполняет её начальной структурой. С этого момента папка является Git-репозиторием и Git начинает отслеживать изменения в ней.

$ cd my-project
$ git init
Initialized empty Git repository in /Users/you/my-project/.git/

$ git status
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

После инициализации у тебя есть пустой репозиторий. Коммитов ещё нет, файлы не отслеживаются — нужно их добавить через git add.

Структура папки .git #

После git init папка .git содержит:

.git/
├── objects/           # База данных объектов (блобы, деревья, коммиты)
│   ├── info/
│   └── pack/
├── refs/              # Указатели на коммиты
│   ├── heads/         # Локальные ветки
│   └── tags/          # Теги
├── HEAD               # Указатель на текущую ветку
├── config             # Конфигурация репозитория
├── description        # Описание (используется GitWeb)
├── hooks/             # Скрипты для автоматизации
│   ├── pre-commit.sample
│   └── ...
└── info/
    └── exclude        # Локальный gitignore (не коммитится)

Самое важное: objects/ — здесь хранится вся история. HEAD — указывает на текущую ветку. config — настройки конкретного репозитория.

⚠️ Осторожно: не редактируй файлы внутри .git вручную. Это может повредить репозиторий.

Простая инициализация #

Самый распространённый сценарий — инициализировать репозиторий в существующей папке проекта:

# Перейти в папку проекта
cd my-project

# Инициализировать репозиторий
git init

# Проверить что создалось
ls -la
# итого 0
# drwxr-xr-x   .git/
# -rw-r--r--   main.py
# -rw-r--r--   README.md

Создание папки и инициализация в одну команду #

Если папки ещё нет — можно передать имя папки как аргумент:

# Создать папку my-project и инициализировать в ней репозиторий
git init my-project

# Это эквивалентно:
mkdir my-project && cd my-project && git init

Git создаст папку, войдёт в неё и инициализирует репозиторий.

Указание имени начальной ветки #

По умолчанию главная ветка называется master. Современный стандарт — называть её main. Указать имя можно флагом -b:

# Инициализировать с главной веткой 'main'
git init -b main

# Или задать глобально для всех новых репозиториев
git config --global init.defaultBranch main

После этого все новые репозитории будут начинаться с ветки main.

git init –bare: репозиторий для сервера #

git init --bare создаёт «голый» (bare) репозиторий — без рабочей директории. Он содержит только данные Git (то, что обычно лежит в папке .git), без файлов проекта.

Голый репозиторий используется как централизованное хранилище, куда разработчики отправляют (push) и откуда забирают (pull) изменения:

# Создать голый репозиторий на сервере
git init --bare /opt/git/project.git

# Теперь разработчики могут клонировать его
git clone user@server:/opt/git/project.git

По соглашению голые репозитории именуются с суффиксом .git: project.git.

Ключевые отличия:

git initgit init --bare
Рабочая директорияЕстьНет
Где используетсяЛокально на компьютере разработчикаНа сервере как центральное хранилище
Можно ли коммитить напрямуюДаНет
СодержитПапку .git + рабочие файлыТолько содержимое .git

Подробнее о голых репозиториях и настройке собственного Git-сервера читай в статье Удалённые репозитории и Git-сервер.

Первые шаги после git init #

После инициализации репозиторий пустой — нужно добавить файлы и сделать первый коммит:

# 1. Инициализировать репозиторий
git init -b main

# 2. Создать первый файл
echo "# My Project" > README.md

# 3. Проверить статус
git status
# On branch main
# Untracked files:
#   README.md

# 4. Добавить файл в индекс
git add README.md

# 5. Создать первый коммит
git commit -m "Initial commit"

# 6. Посмотреть историю
git log --oneline
# a3f5b2d Initial commit

Если нужно подключить удалённый репозиторий (например, GitHub):

# 7. Добавить удалённый репозиторий
git remote add origin https://github.com/username/project.git

# 8. Отправить на GitHub
git push -u origin main

Переинициализация существующего репозитория #

Если репозиторий уже инициализирован, повторный git init безопасен — он не уничтожит историю:

$ git init
Reinitialized existing Git repository in /Users/you/my-project/.git/

Это может пригодиться для обновления шаблонов hooks или восстановления повреждённой конфигурации.

Инициализация с шаблоном #

Можно использовать директорию-шаблон при инициализации. Git скопирует её содержимое в новый .git:

git init --template=/path/to/template my-project

Полезно в организациях, где все репозитории должны иметь одинаковые hooks или конфигурацию.

Частые ошибки #

«fatal: not a git repository» — ты запускаешь Git-команду в папке, которая не является репозиторием:

$ git status
fatal: not a git repository (or any of the parent directories): .git

# Решение: инициализировать репозиторий
git init

# Или убедиться, что ты в правильной папке
pwd

Случайная инициализация в неправильной папке. Если ты сделал git init не там — просто удали папку .git:

# Отменить инициализацию: удалить папку .git
rm -rf .git

# Файлы проекта останутся нетронутыми

Инициализация в домашней папке. Никогда не делай git init в домашней директории (~). Git начнёт отслеживать все твои файлы:

# ❌ Плохо
cd ~
git init

# ✅ Хорошо
mkdir ~/projects/my-project
cd ~/projects/my-project
git init

Часто задаваемые вопросы #

Что произойдёт если запустить git init дважды? #

Ничего плохого. Git выведет Reinitialized existing Git repository и обновит шаблонные файлы. История и коммиты не затронуты.

Зачем нужна папка .git? #

В ней хранится весь репозиторий: история коммитов, ветки, конфигурация, хуки. Без этой папки Git не знает о твоём проекте.

В чём разница между git init и git clone? #

git init создаёт новый пустой репозиторий. git clone копирует существующий репозиторий с сервера, включая всю историю и настройку удалённого репо. Подробнее в статье Что такое репозиторий.

Как инициализировать с главной веткой main вместо master? #

git init -b main
# или глобально:
git config --global init.defaultBranch main

Можно ли git init –bare переделать в обычный репозиторий? #

Теоретически да, но это нетривиально. Проще склонировать голый репозиторий: git clone my-project.git my-project — и ты получишь обычный репозиторий с рабочей директорией.


Читай также #