В чем разница между git init
и git init --bare
? Я обнаружил, что многие статьи в блогах требуют --bare
для их Git-сервера?
Из man-страницы, там сказано:
--bare
Создать пустой репозиторий. Если окружение GIT_DIR не задано, оно устанавливается в текущий рабочий каталог
Но что это означает на самом деле? Нужно ли иметь --bare
для настройки Git-сервера?
Другое различие между - пустые и Рабочие Древовидные репозитории - то, что в первом случае никакие потерянные фиксации не хранятся, но только фиксирует, которые принадлежат боковому пути , хранятся. С другой стороны, Рабочее Дерево сохраняет все фиксации навсегда. Посмотрите ниже...
я создал первый репозиторий (имя: мерзавец, пустой ) с git init --bare
. Это - сервер. Это находится на левой стороне, где нет никаких удаленных ответвлений, потому что это - сам удаленный репозиторий.
я создал второй репозиторий (имя: рабочее дерево мерзавца ) с git clone
сначала. Это справа. Этому связали локальные ответвления с удаленными ответвлениями.
(Тексты, 'первые', 'вторые', 'третьи', 'четвертые', 'альфа', 'бета' и 'дельта', являются комментариями фиксации. Имена 'ведущее устройство' и 'грек' являются именами ответвления.)
Теперь я удалю ответвление, названное 'греческим языком' оба в [1 110] мерзавец, пустой (команда: git push --delete origin greek
) и локально в [1 111] рабочее дерево мерзавца (команда: git branch -D greek
). Вот то, как дерево смотрит:
мерзавец, пустой , репозиторий удаляет и ответвление и все фиксации, на которые ссылаются. В изображении мы видим, что его дерево было уменьшено поэтому.
, С другой стороны, рабочее дерево мерзавца репозиторий, который эквивалентен наиболее часто используемому локальному репозиторию, не удаляет фиксации, на которые может теперь только сослаться непосредственно Ваш хеш с git checkout 7fa897b7
команда. Именно поэтому его дерево не имеет его измененной структуры.
ВКРАТЦЕ: Фиксации никогда не отбрасываются в [1 114] рабочее дерево репозитории, но удалены в [1 115] пустой репозитории.
На практике, можно только восстановить удаленное ответвление по серверу, если он существует в локальном репозитории.
, Но очень странно, что размер пустой репозиторий не уменьшается в размере диска после удаления удаленного ответвления. Таким образом, файлы все еще там так или иначе. Для дампа репозитория путем удаления, на что больше не ссылаются или на что никогда нельзя ссылаться (последний случай) используют git gc --prune
команда