W3docs

git init

Узнайте о команде git init: её назначении, параметрах, директории шаблонов и отличии от git clone.

Что делает git init

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

При выполнении команды внутри проекта создаётся единственная скрытая поддиректория .git. В ней хранится всё необходимое Git для управления историей: база объектов, ссылки (ветки и теги), указатель HEAD, конфигурация и копия файлов шаблона по умолчанию. Сами файлы проекта остаются на своих местах — при инициализации Git их не перемещает и не изменяет.

На этой странице рассказывается о разных способах запуска git init, об отличии обычного репозитория от «голого», о директории шаблонов и о полном списке параметров. Если вам нужна копия уже существующего репозитория, используйте git clone, а не git init. Для общего обзора см. What is Git.

Инициализация репозитория

Самый простой способ начать версионирование проекта — перейти в его директорию командой cd и запустить команду без аргументов:

cd my-project
git init

Git выведет подтверждение и создаст поддиректорию .git:

Initialized empty Git repository in /home/user/my-project/.git/

Можно также передать имя директории. Git создаст её (если она ещё не существует) и разместит там новый репозиторий:

git init my-project

На этом этапе репозиторий пуст — коммитов ещё нет. Следующие шаги обычно — добавить файлы в индекс с помощью git add и зафиксировать их командой git commit. Проверить состояние нового репозитория в любой момент можно с помощью git status.

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

Запуск git init в директории, где уже есть поддиректория .git, безопасен. Git не удаляет и не перезаписывает историю или конфигурацию — он просто восстанавливает недостающие файлы шаблона и сообщает:

Reinitialized existing Git repository in /home/user/my-project/.git/

Это иногда полезно, чтобы подтянуть новые файлы из обновлённой директории шаблонов.

«Голые» репозитории

Голый репозиторий создаётся с флагом --bare. Он содержит историю Git, но не имеет рабочей директории — в нём нет извлечённых файлов для редактирования, поэтому напрямую в него коммитить нельзя.

git init --bare project.git

«Голые» репозитории служат общим центральным местом, в которое другие клоны выполняют push и из которого выполняют pull. Отправка изменений в не-голый репозиторий может затронуть файлы, с которыми кто-то активно работает в его рабочей директории, поэтому центральные и удалённые репозитории почти всегда бывают «голыми». По соглашению им дают суффикс .git (например, project.git).

Разница видна в структуре. Обычный репозиторий скрывает файлы Git внутри папки .git:

my-project/
├── .git/ Git's data lives here
└── (your files)

«Голый» репозиторий помещает то же содержимое прямо на верхний уровень — рабочего дерева вокруг него нет:

project.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/
└── refs/

Bare

Задание имени начальной ветки

Исторически Git называл первую ветку master. Вы можете выбрать другое имя во время инициализации с помощью --initial-branch (или сокращённой формы -b):

git init --initial-branch=main

Чтобы сделать это именем по умолчанию для каждого нового репозитория и больше не передавать флаг вручную, задайте его один раз в глобальной конфигурации:

git config --global init.defaultBranch main

Подробнее о глобальных настройках см. в git config.

Директория шаблонов

Когда Git создаёт поддиректорию .git, он заполняет её из директории шаблонов — набора файлов (например, образцов хуков и файла info/exclude), которые копируются в каждый новый репозиторий. Git выбирает шаблон, используя первый из следующих источников по порядку:

  • путь, указанный с параметром --template,
  • переменная окружения $GIT_TEMPLATE_DIR,
  • конфигурационная переменная init.templateDir,
  • встроенное значение по умолчанию, обычно /usr/share/git-core/templates.

Шаблоны по умолчанию служат в основном примерами (например, образцы хуков по умолчанию отключены). Предоставив собственную директорию шаблонов, вы можете автоматически копировать файлы и папки — например, стандартный набор хуков — в каждый инициализируемый репозиторий.

Справочник по параметрам

git init принимает необязательный аргумент <directory>. Если он не указан, команда выполняется в текущей директории; если указанный путь не существует, Git его создаст. Наиболее полезные флаги приведены ниже.

ФлагОписание
-q, --quietВыводит только ошибки и предупреждения; весь остальной вывод подавляется.
--bareСоздаёт «голый» репозиторий (без рабочей директории).
--template=<template-directory>Указывает директорию шаблонов, из которой копируются файлы при создании репозитория.
--separate-git-dir=<git-dir>Сохраняет данные Git по пути <git-dir> и оставляет небольшой текстовый файл .git, указывающий на него. Для существующего репозитория директория .git перемещается по новому пути.
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]Настраивает репозиторий для совместного использования несколькими пользователями, управляя правами доступа к файлам группы.
-b <name>, --initial-branch=<name>Задаёт имя начальной ветки в новом репозитории.

git init и git clone

Обе команды создают локальный репозиторий, но отправной точкой служат противоположные ситуации:

  • git init превращает существующую локальную папку в новый пустой репозиторий без истории.
  • git clone скачивает существующий удалённый репозиторий — со всей историей, ветками и файлами — и устанавливает связь с этим удалённым репозиторием.

Используйте git init, когда начинаете проект с нуля на своём компьютере; используйте git clone, когда присоединяетесь к проекту, который уже находится на сервере, например на GitHub.

Практика

Практика
Каковы функции и параметры команды 'git init'?
Каковы функции и параметры команды 'git init'?
Was this page helpful?