Можно ли убрать голый репо? - PullRequest
9 голосов
/ 15 мая 2011

У меня есть публичный репо.

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

Есть ли какая-нибудь команда для очистки чистого репо? Что-то вроде git remote prune, которое работает для противоположного сценария?

Редактировать: Поскольку, кажется, есть некоторая путаница. Это моя установка:

DevelMachine1
   ^
   |
   v
MainDevelRepo <-> MainRepo -> PublicBareRepo (with a lot of junk) -> The World
   ^
   |
   v
DevelMachine2

Ответы [ 2 ]

3 голосов
/ 15 мая 2011

После еще некоторой дополнительной информации:

MainRepo -> PublicBareRepo (with a lot of junk) -> The World

Так что проблема здесь. Время от времени вы продвигаетесь от MainRepo к PublicBareRepo, который теперь содержит вещи, которые больше не действительны и не должны быть там. В будущем убедитесь, что вы нажимаете только те ветки, которые должны быть там. Полагаю, сейчас главное - удалить с него ветки, а затем я должен вернуться к своему первоначальному ответу (если мы говорим о том же мусоре)

git push PublicBareRepo :someBranch1
git push PublicBareRepo :someBranch2

После получения дополнительной информации от ОП:

Похоже, что дизайн репо вызывает проблемы, и --Rirm - способ решить эту проблему. Если A является основным голым репо, в которое разработчики помещают свои вещи, и если B является публичным репо, то B должен быть клоном A с параметром --mirror.

Что нужно сделать, это выполнить «удаленное обновление git» (при условии, что B уже является зеркалом A) на B, чтобы он сам обновился и снова стал идентичным A.


Оригинальный ответ:

Если вы хотите удалить ветку в удаленном хранилище, вы можете сделать:

git push origin :branchName

То же самое относится и к любому рефери, например для тега:

git push origin :tagName
3 голосов
/ 15 мая 2011

Все эти объекты, на которые нет ссылок, в конце концов должны быть удалены, учитывая:

Таким образом, даже если у вас нет прямого локального доступа к удаленному репо «голое», простого факта его «использования» (толчка к нему) достаточно для запуска gc и prune в указанном репо.


Примечание: мой ответ был в контексте удаленного репо (вы не работаете напрямую с репо, вы подталкиваете к нему)

git remote prune - это операция, выполняемая в локальном репо (не-голом, где вы выбираете несколько удаленных веток и у вас есть много отслеживающих веток под remotes/* пространство имен указанного локального репо)

Очистка удаленного репо (голого здесь) означает нажатие :refs, как упомянуто Магнусом Скогом в его ответе .
Если эти ссылки не существуют в текущем локальном репо 'DevelMachinex', то нет другого решения, кроме:

  • клонирование - зеркальное отражение удаленного репозитория «MainDevelRepo» (вы получите все эти устаревшие ветви как локальные удаленные ветви отслеживания)
  • локально удалять ветки
  • push --mirror, поскольку в документации упоминается "удаленные ссылки будут удалены с удаленного конца".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...