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 initGit выведет подтверждение и создаст поддиректорию .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/
Задание имени начальной ветки
Исторически 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.