В чем разница между "git init" и "git init --bare"?

В чем разница между git init и git init --bare? Я обнаружил, что многие статьи в блогах требуют --bare для их Git-сервера?

Из man-страницы, там сказано:

--bare

Создать пустой репозиторий. Если окружение GIT_DIR не задано, оно устанавливается в текущий рабочий каталог

Но что это означает на самом деле? Нужно ли иметь --bare для настройки Git-сервера?

157
задан Kit Ho 13 July 2014 в 17:57
поделиться

1 ответ

Другое различие между - пустые и Рабочие Древовидные репозитории - то, что в первом случае никакие потерянные фиксации не хранятся, но только фиксирует, которые принадлежат боковому пути , хранятся. С другой стороны, Рабочее Дерево сохраняет все фиксации навсегда. Посмотрите ниже...

я создал первый репозиторий (имя: мерзавец, пустой ) с git init --bare. Это - сервер. Это находится на левой стороне, где нет никаких удаленных ответвлений, потому что это - сам удаленный репозиторий.

я создал второй репозиторий (имя: рабочее дерево мерзавца ) с git clone сначала. Это справа. Этому связали локальные ответвления с удаленными ответвлениями.

(Тексты, 'первые', 'вторые', 'третьи', 'четвертые', 'альфа', 'бета' и 'дельта', являются комментариями фиксации. Имена 'ведущее устройство' и 'грек' являются именами ответвления.)

Local and remote repositories

Теперь я удалю ответвление, названное 'греческим языком' оба в [1 110] мерзавец, пустой (команда: git push --delete origin greek) и локально в [1 111] рабочее дерево мерзавца (команда: git branch -D greek). Вот то, как дерево смотрит:

The git-bare repository deletes what is no longer referenced

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

, С другой стороны, рабочее дерево мерзавца репозиторий, который эквивалентен наиболее часто используемому локальному репозиторию, не удаляет фиксации, на которые может теперь только сослаться непосредственно Ваш хеш с git checkout 7fa897b7 команда. Именно поэтому его дерево не имеет его измененной структуры.

ВКРАТЦЕ: Фиксации никогда не отбрасываются в [1 114] рабочее дерево репозитории, но удалены в [1 115] пустой репозитории.

На практике, можно только восстановить удаленное ответвление по серверу, если он существует в локальном репозитории.

, Но очень странно, что размер пустой репозиторий не уменьшается в размере диска после удаления удаленного ответвления. Таким образом, файлы все еще там так или иначе. Для дампа репозитория путем удаления, на что больше не ссылаются или на что никогда нельзя ссылаться (последний случай) используют git gc --prune команда

1
ответ дан 23 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: