Перейти к содержимому

Git init bare что это

  • автор:

38. Чистые репозитории

Чистый репозиторий — это репозиторий, не имеющий рабочей директории. Он содержит только директорию .git , в которой Git хранит все свои внутренние данные. Основное предназначение таких репозиториев — быть центральным хранилищем, в которое разработчики могут отправлять и из которого могут получать данные. Поэтому в них нет смысла создавать рабочие файлы, они будут только впустую занимать место на диске. Чистые репозитории также используются в сервисах Git-хостинга таких, как GitHub и GitLab. В следующих уроках мы узнаем, как создать чистый репозиторий и как отправлять в него изменения.

01 Создайте чистый репозиторий

Выполните
cd .. git clone --bare work work.git ls work.git 

Сейчас мы находимся в директории repositories .

Результат
$ git clone --bare work work.git Cloning into bare repository 'work.git'. done. $ ls work.git branches config description HEAD hooks info objects packed-refs refs 

Принято считать, что репозитории, заканчивающиеся на .git , являются чистыми репозиториями. Мы видим, что в репозитории work.git нет рабочей директории. По сути, это просто директория .git из обычного репозитория.

Какие основные задачи bare репозитория?

Насколько я понял, bare репозиторий создается как буфер между основной копией на сервере и ветками разработки. Но не до конца понимаю, читая статью «удачная модель ветвления», зачем нужен этот тип репозитория, если все должно работать и так.

Отслеживать
34k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
задан 7 июл 2016 в 9:51
11k 18 18 золотых знаков 64 64 серебряных знака 128 128 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

bare-репозиторий — это не какой-то особый тип репозитория. это, собственно, и есть репозиторий.

командой git init —bare в текущем каталоге создаётся именно репозиторий:

$ git init --bare $ ls -F branches/ config* description HEAD hooks/ info/ objects/ refs/ 

а вот командой git init (без опции —bare ) репозиторий создаётся в каталоге .git :

$ git init $ ls -F .git branches/ config* description HEAD hooks/ info/ objects/ refs/ 

что позволяет использовать текущий каталог как рабочий каталог (working dir) с извлечёнными из репозитория файлами/каталогами, версии которых и отслеживаются этим самым репозиторием (вообще рабочий каталог может находиться в совершенно ином месте и указываться программе git с помощью опций -C или —work-tree или их комбинации (эти опции не эквивалентны), или переменной окружения GIT_WORK_TREE , или конфигурационной переменной core.worktree ).

«превратить» bare в не-bare (и обратно) очень легко: достаточно изменить значение ( true или false ) переменной bare в секции [core] файла config . вручную или командой git config core.bare значение . т.е., фактически, это некий признак, на практике означающий, что «рядом есть рабочий каталог с отслеживаемыми файлами».

зачем нужен этот признак?

чтобы при попытке «запушить» в текущую ветку (ту, на которую указывает содержимое файла HEAD ) «репозитория с рабочим каталогом» (не-bare-репозиторий) пользователь получал ошибку и подробное объяснение:

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require ‘git reset —hard’ to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set ‘receive.denyCurrentBranch’ configuration variable to
remote: error: ‘ignore’ or ‘warn’ in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless yo
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: ‘receive.denyCurrentBranch’ configuration variable to ‘refuse’

мой вольный перевод:

отказано в обновлении ветки refs/heads/master , из которой извлечены файлы в рабочий каталог.

по умолчанию обновление текущей ветки в не-bare-репозитории запрещено, потому что это приведёт к несоответствию между тем, что вы «пушите», и индексом и содержимым рабочего каталога, и потребует выполнения git reset —hard для приведения рабочего каталога в соответствие с текущей веткой, т.е. той, которая указана в файле HEAD .

вы можете установить значение конфигурационной переменной receive.denyCurrentBranch удалённого репозитория в значение ignore или warn для разрешения «пушить» в его текущую ветку; тем не менее этого не рекомендуется делать, если только вы не настроили (автоматическое) обновление рабочего каталога каким-либо иным путём.

вы можете отключить выдачу этого сообщения, не меняя умолчального поведения, установив переменной receive.denyCurrentBranch значение refuse .

Что такое голый/чистый/bare репозиторий в git?

Голый/Чистый/bare репозиторий в Git — это репозиторий, который не имеет рабочего каталога. Обычно используется в качестве удалённого репозитория. Так как bare репозиторий используется только для обмена, то нет причин создавать рабочую копию на диске, проще говоря, такой репозиторий содержит только каталог .git вашего проекта и ничего больше.

Опубликовано 26.10.2016 25.10.2016 Автор Урванов Фёдор Рубрики Программирование Метки Git

click fraud protection

В Git разработчики создают несколько репозиториев и работают с ними. Они инициализируют репозитории для отслеживания изменений в новой кодовой базе или преобразования существующей кодовой базы в репозиторий Git. Более того, инициализация репозитория также обеспечивает резервную копию кода. Для инициализации репозитория Git можно использовать команды «git init» и «git init –bare», однако обе они имеют разные цели.

Эта запись объяснит:

  • Основная разница между «git инициировать» и «git init — голый?
  • Как использовать «git инициироватьКомандование?
  • Как использовать «git init — голыйКомандование?

Основная разница между «git init» и «git init -bare»?

git инициировать” — это команда в Git, используемая для инициализации нового репозитория Git в текущем рабочем каталоге. Он создает «.git», которая содержит сохраненные данные Git. С другой стороны, «git init — голыйКоманда инициализирует голый репозиторий в каталоге. У него нет рабочего дерева. Обычно он используется для создания центрального репозитория, в который несколько разработчиков помещают свой код и извлекают из него изменения.

Как использовать команду «git init»?

Чтобы просмотреть использование команды «git init», выполните указанные ниже действия.

Шаг 1. Переключитесь на локальный каталог

Сначала перенаправьте в конкретный локальный каталог:

Шаг 2. Инициализируйте репозиторий Git

Чтобы создать или создать новый пустой репозиторий Git в текущем каталоге, напишите приведенную ниже команду:

Можно заметить, что пустой репозиторий Git был инициализирован:

Шаг 3. Просмотр содержимого репозитория

Теперь перечислите содержимое текущего репозитория, включая скрытые файлы:

На изображении ниже «.git” можно увидеть в текущем каталоге:

Как использовать команду «git init –bare»?

Выполните следующие шаги, чтобы увидеть использование команды «git init –bare»:

Шаг 1: перенаправление в нужный каталог

Сначала переключитесь в конкретный каталог:

Шаг 2: Инициализируйте голый репозиторий

Чтобы создать или создать новый голый репозиторий в текущем каталоге, выполните предоставленную команду:

git инициировать —голый

Здесь «голый” используется для создания репозитория без рабочего каталога.

Видно, что голый репозиторий инициализирован:

Шаг 3. Просмотр пустого содержимого репозитория

Отобразите содержимое голого репозитория, включая скрытые файлы:

В приведенном ниже выводе нет «.git” можно увидеть в голом репозитории:

Мы эффективно объяснили сравнение между «git инициировать» и «git init — голыйкоманды.

Заключение

«git init» и «git init –bare» — это команды в Git, используемые для создания/создания нового репозитория Git, но у них разные цели. “git инициировать” используется для инициализации нового репозитория Git в каталоге при создании в нем папки .git. Напротив, «git init — голый” инициализирует голый репозиторий Git без создания рабочего каталога. В этой статье сравнивались команды «git init» и «git init –bare» в Git.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *