Как я могу преобразовать «нормальный» Git-репозиторий в пустой?
Основное отличие, кажется, заключается в следующем:
в обычном Git-репозитории у вас есть
.git
папка внутри репозитория, содержащая все соответствующие данные и все другие файлы, составляющие вашу рабочую копиюв пустом Git-репозитории нет рабочей копии, а папка (назовем ее
repo.git
) содержит фактические данные репозитория
mv repo/.git repo.git; rm -rf repo
&&
вместо;
в случаеmv
неудачи!Ответы:
Короче говоря: замените содержимое
repo
на содержимоеrepo/.git
, затем скажите репозиторию, что теперь это пустой репозиторий.Для этого выполните следующие команды:
Обратите внимание, что это отличается от выполнения операции
git clone --bare
в новом месте (см. Ниже).источник
core.bare
. Теперь, после поиска этой опции, я могу подтвердить ее: kernel.org/pub/software/scm/git-core/docs/git-config.htmlgit clone --bare /path/to/repo
).rm
команда может потребоваться,* \.[!.]*
а не*
для удаления точечных файлов и точечных каталогов.Ваш метод выглядит так, как будто он будет работать; Файловая структура чистого репозитория - это то, что находится внутри каталога .git. Но я не знаю, действительно ли какие-либо файлы были изменены, поэтому, если это не сработает, вы можете просто сделать
Вам, вероятно, придется сделать это в другом каталоге, чтобы избежать конфликта имен, а затем вы можете просто переместить его туда, куда вам нужно. И вам может понадобиться изменить файл конфигурации так, чтобы он указывал, где находится исходное хранилище.
источник
git clone --bare /path/to/repo.git /path/to/newbarerepo.git
git update-server-info
репо после создания.Я думаю, что следующая ссылка будет полезна
GitFaq: Как мне сделать доступным не-голое хранилище?
источник
git clone
) имеет недостатки, упомянутые выше.Если вы специально не хотите или не хотите вертеть биты в файловой системе, действительно просто создать пустую версию не пустого хранилища (упомянутое здесь в нескольких других постах). Это часть основной функциональности git:
git clone --bare existing_repo_path bare_repo_path
источник
Пожалуйста, также подумайте об использовании
Из документации :
источник
clone
). Я что-то пропустил? Было--mirror
относительно недавнее дополнение?--mirror
доступна с версии 1.7, так что уже довольно долго. Вы можете проверить здесьЯ просто хотел отправить в хранилище по сетевому пути, но git не позволил бы мне сделать это, если этот хранилище не было помечено как пустое. Все, что мне было нужно, это изменить его конфигурацию:
Не нужно возиться с файлами, если вы не хотите держать его в чистоте.
источник
Я прочитал ответы, и я сделал это:
это оставит содержимое
repos/.git
как голоеrepos.git
источник
Вот то, что я считаю самым безопасным и простым. Здесь ничего не указано выше. Я просто хочу увидеть ответ, который показывает безопасную пошаговую процедуру. Вы запускаете одну папку из репозитория (репо), который хотите обнажить. Я принял соглашение, подразумеваемое выше, что голые папки репозитория имеют расширение .git.
источник
Просто читать
Pro Git Book: 4.2 Git на сервере - Получение Git на сервере
которые сводятся к
Затем поместите my_project.git на сервер
В основном это то, на что пытался указать ответ № 42 . Несомненно, можно было бы заново изобрести колесо ;-)
источник
Вот небольшая функция BASH, которую вы можете добавить в ваш .bashrc или .profile в системе на основе UNIX. После добавления оболочка либо перезапускается, либо файл перезагружается с помощью вызова
source ~/.profile
илиsource ~/.bashrc
.После вызова в каталоге, содержащем каталог .git, он внесет соответствующие изменения для преобразования хранилища. Если при вызове отсутствует каталог .git, появится сообщение FAILURE и никаких изменений в файловой системе не произойдет.
источник
Методы, которые говорят об удалении файлов и обмана с перемещением каталога .git, не чисты и не используют метод "git" для выполнения чего-то, что должно быть простым. Это самый чистый метод, который я нашел для преобразования обычного репо в голое репо.
Первый клон / путь / к / нормальному / репо в голое репо с именем repo.git
Затем удалите источник, который указывает на / path / to / normal / repo
Наконец, вы можете удалить свой оригинальный репо. В этот момент вы можете переименовать repo.git в repo, но стандартным соглашением для обозначения репозитория git является some.git, так что я бы лично оставил это так.
После того, как вы все это сделали, вы можете клонировать свое новое голое репо (которое фактически создает нормальное репо, а также то, как вы бы конвертировали его из голого в обычное)
Конечно, если у вас есть другие апстримы, вы захотите записать их и обновить свой репо, чтобы включить его. Но опять же, все это можно сделать с помощью команды git. Помните, что страницы руководства - ваш друг.
источник
.git
папки. Очень полезно учиться тому, как части сочетаются друг с другом.Если у вас есть хранилище с несколькими локальными извлеченными ветвями / refs /head / * и несколькими удаленными ветками удаленных веток / origin / * И если вы хотите преобразовать это в хранилище BARE со всеми ветками в / refs /head / *
Вы можете сделать следующее, чтобы сохранить историю.
источник
Я использовал следующий скрипт, чтобы прочитать текстовый файл со списком всех моих репозиториев SVN и преобразовать их в GIT, а затем использовать git clone --bare для конвертации в голое репозиторий git.
list.txt имеет формат
и users.txt имеет формат
www-data - пользователь веб-сервера Apache, необходимо разрешение для изменения HTTP
источник
Вот определение пустого хранилища из gitglossary :
Я приехал сюда, потому что я играл с «локальным репозиторием» и хотел иметь возможность делать все, что хотел, как если бы это был удаленный репозиторий. Я просто играл, пытаясь узнать о мерзавце. Я предполагаю, что это ситуация для тех, кто хочет прочитать этот ответ.
Я хотел бы получить экспертное мнение или некоторые конкретные контрпримеры, однако, похоже, что (после того, как я покопался в некотором исходном коде git, который я нашел), просто перейдя к файлу
.git/config
и установив атрибут core пустым в true , git позволит вам делать все, что угодно Вы хотите сделать с хранилищем удаленно. Т.е. следующие строки должны существовать в.git/config
:(Это примерно то, что
git config --bool core.bare true
будет делать команда , что, вероятно, рекомендуется для решения более сложных ситуаций)Я оправдываю это утверждение тем, что в исходном коде git, по-видимому, есть два разных способа проверки, является ли репо пустым или нет. Один из них - проверка глобальной переменной
is_bare_repository_cfg
. Это устанавливается на некотором этапе настройки и отражает значение, найденное в.git/config
файле. Другой - это функцияis_bare_repository()
. Вот определение этой функции:У меня нет ни времени, ни опыта, чтобы говорить это с абсолютной уверенностью, но, насколько я могу судить, если у вас установлен
bare
атрибутtrue
in.git/config
, это всегда должно возвращаться1
. Остальная часть функции, вероятно, предназначена для следующей ситуации:Я поэкспериментирую с ним, когда смогу позже, но, похоже, это указывает на то, что установка core.bare = true эквивалентна удалению core.bare из файла конфигурации и правильной настройке каталогов.
В любом случае, установка core.bare = true, безусловно, позволит вам перейти к нему, но я не уверен, что присутствие файлов проекта приведет к ошибкам в некоторых других операциях. Это интересно, и я полагаю, поучительно подтолкнуть в хранилище и посмотреть, что произошло локально (т.е. запустить
git status
и понять результаты).источник
Во-первых,
backup
ваш существующий репо:Во-вторых, запустите следующее:
источник
Онелинер для выполнения всех вышеперечисленных операций:
(не обвиняйте меня, если что-то взрывается, и у вас не было резервных копий: P)
источник
Ничего себе, просто удивительно, как много людей вмешалось в это, особенно учитывая, что, похоже, ни один человек не остановился, чтобы спросить, почему этот человек делает то, что он делает.
ЕДИНСТВЕННОЕ различие между git-репозиторием без обнажений и без него состоит в том, что версия без обнажения имеет рабочую копию. Основная причина, по которой вам нужно пустое хранилище, заключается в том, что если вы хотите сделать его доступным для третьей стороны, вы не можете работать с ним напрямую, поэтому в какой-то момент вам придется клонировать его, и в этот момент вы Вернемся к обычной версии рабочей копии.
При этом, чтобы конвертировать в голое репо, все, что вам нужно сделать, это убедиться, что у вас нет ожидающих коммитов, а затем просто:
Вот и все, голое репо.
источник
git config core.bare true
так же.git config core.bare true
, как в этом ответе .