Подтвердить что ты не робот

Удалить или удалить всю историю, фиксации и ветки с удаленного репозитория Git?

Я прочитал и пробовал множество рекомендаций и обсуждений команды Git, которые продолжаются в течение нескольких дней. Похоже, что на самом деле нет простого и всеобъемлющего способа сделать удаленный репозиторий Git полностью пустым - нет ветвей, нет ссылок, нет объектов, нет файлов, нет ничего.

Да, Я признаю, что можно удалить и воссоздать репо - если у вас были такие права на происхождение (чего у меня нет), но это не так. Как это делается? Какая комбинация команд Git на самом деле сделает это, оставит репо в девственном состоянии, готов принять то, что мы хотим вставить в него, и с практически без размера (или минимального размера девственного репо)?

Пожалуйста, не говорите мне, что это не должно быть сделано, или что мы должны сообщить всем пользователям и т.д.. Я все это знаю. Я просто хочу начать совершенно новый.

4b9b3361

Ответ 1

Возможно, вы захотите попробовать пустую локальную репо с --mirror флагом (выделение мое):

--mirror

Вместо того, чтобы называть каждый ref для push, указывает, что все refs в refs/(который включает, но не ограничивается refs/heads/, refs/remotes/ и refs/tags/), зеркалируются в удаленный репозиторий. Недавно созданные локальные ссылки будут перенесены в удаленный конец, локально обновленные ссылки будут принудительно обновлены на удаленном конце, а удаленные ссылки будут удалены с удаленного конца. Это значение по умолчанию, если установлен параметр конфигурации remote.<remote>.mirror.

Если ваше репо находится в GitHub, вы получите эту ошибку, если при попытке нажать master установлена ​​ветка по умолчанию:

$ mkdir practice; cd practice;
$ git init; git remote add origin [email protected]:user/practice.git;

$ git push origin --mirror
remote: error: refusing to delete the current branch: refs/heads/master
To [email protected]:user/practice.git
 ! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to '[email protected]:user/practice.git'

Я обошел это, сделав начальную фиксацию, а затем нажав.

Обязательное предупреждение: это, конечно, полностью уничтожит всю вашу историю и совершит ваше удаленное репо: все ссылки, все ветки, все теги и т.д. Убедитесь, что это на самом деле то, что Вы хотите сделать. Конечно, вы всегда можете сделать резервный клон своего удаленного репо, прежде чем делать это, если вы хотите сохранить его по какой-либо причине.

Также обратите внимание, что ни один из коммитов не будет удален сразу. Они просто станут болтливыми коммитами, а это значит, что они недоступны из ветки. В конце концов они получат мусор, собранный репозиториями Git, но если у вас есть доступ к удаленному репо, вы можете вручную запустить сборку мусора с помощью git gc.

Ответ 2

Вы не можете этого сделать. Лучшее, что вы можете сделать, это удалить все ссылки и надеяться, что сервер выполнит git gc и имеет настройки для объектов prune, у которых нет ссылок. Это зависит от конфигурации сервера.

Обычно для удаления объектов на git gc требуется 14 дней. Однако этот объект не будет клонирован, если вы попытаетесь клонировать репозиторий.

У вас уже есть хороший ответ, как сделать "взломать", чтобы удалить все ссылки. Он работает, и ваше репо будет казаться вам, поскольку оно "свежо". Однако это не так.