Вот определение пустого хранилища из gitglossary :
Пустой репозиторий обычно представляет собой каталог с соответствующим именем и суффиксом .git, который не имеет локально извлеченной копии ни одного из файлов, находящихся под контролем ревизии. То есть все административные и управляющие файлы Git, которые обычно присутствуют в скрытом подкаталоге .git, вместо этого непосредственно присутствуют в каталоге repository.git, и никакие другие файлы не присутствуют и не извлекаются. Обычно издатели публичных репозиториев делают открытые репозитории доступными.
Я приехал сюда, потому что я играл с «локальным репозиторием» и хотел иметь возможность делать все, что хотел, как если бы это был удаленный репозиторий. Я просто играл, пытаясь узнать о мерзавце. Я предполагаю, что это ситуация для тех, кто хочет прочитать этот ответ.
Я хотел бы получить экспертное мнение или некоторые конкретные контрпримеры, однако, похоже, что (после того, как я покопался в некотором исходном коде git, который я нашел), просто перейдя к файлу .git/config
и установив атрибут core пустым в true , git позволит вам делать все, что угодно Вы хотите сделать с хранилищем удаленно. Т.е. следующие строки должны существовать в .git/config
:
[core]
...
bare = true
...
(Это примерно то, что git config --bool core.bare true
будет делать команда , что, вероятно, рекомендуется для решения более сложных ситуаций)
Я оправдываю это утверждение тем, что в исходном коде git, по-видимому, есть два разных способа проверки, является ли репо пустым или нет. Один из них - проверка глобальной переменной is_bare_repository_cfg
. Это устанавливается на некотором этапе настройки и отражает значение, найденное в .git/config
файле. Другой - это функция is_bare_repository()
. Вот определение этой функции:
int is_bare_repository(void)
{
/* if core.bare is not 'false', let's see if there is a work tree */
return is_bare_repository_cfg && !get_git_work_tree();
}
У меня нет ни времени, ни опыта, чтобы говорить это с абсолютной уверенностью, но, насколько я могу судить, если у вас установлен bare
атрибут true
in .git/config
, это всегда должно возвращаться 1
. Остальная часть функции, вероятно, предназначена для следующей ситуации:
- core.bare не определен (то есть ни истина, ни ложь)
- Рабочего дерева нет (т. Е. Подкаталог .git является основным каталогом)
Я поэкспериментирую с ним, когда смогу позже, но, похоже, это указывает на то, что установка core.bare = true эквивалентна удалению core.bare из файла конфигурации и правильной настройке каталогов.
В любом случае, установка core.bare = true, безусловно, позволит вам перейти к нему, но я не уверен, что присутствие файлов проекта приведет к ошибкам в некоторых других операциях. Это интересно, и я полагаю, поучительно подтолкнуть в хранилище и посмотреть, что произошло локально (т.е. запустить git status
и понять результаты).
mv repo/.git repo.git; rm -rf repo