Как обновить/уменьшить размер моего рефинга github после запуска BFG Repo Cleaner

Я очистил свое репо с помощью BFG Repo Cleaner, используя следующую процедуру:

$ git clone --mirror git://example.com/some-big-repo.git
$ java -jar bfg.jar --strip-biggest-blobs 500 some-big-repo.git
$ cd some-big-repo.git
$ git reflog expire --expire=now --all
$ git gc --prune=now --aggressive
$ git push

Я вижу, что мое местное репо сократилось на 1 ГБ. Отлично. Проблема, с которой я столкнулась сейчас, и что я не смог найти информацию о том, что теперь я хотел бы также уменьшить размер GitHub-repo. Как достичь этого?

git push не работал, и я также попробовал git push origin --force --all, который дал мне это сообщение об ошибке: error: --all and --mirror are incompatible

Ответ 1

Мой совет: не беспокойтесь о том, что GitHub сообщает как размер репо. По разным причинам он не будет точно отражать "истинный" размер репо.

Что вы действительно волнуете, так это ответ на этот вопрос:

Насколько велика эта репо на моем диске, если я делаю новый клон из GitHub?

Объем данных, которые вы должны загрузить, чтобы сделать новый клон вашего репо и объем пространства, который он занимает на вашем диске, - это то, что вам действительно нужно (и почти одинаковые количества). Попробуйте сделать новый клон и посмотрите, сколько данных передано и сколько места он занимает на вашем диске. Он должен соответствовать размеру вашего усохшего репо.

Число, указанное в консоли GitHub (например, https://github.com/settings/repositories или в API GitHub) для вас не очень важно, которому повезло, потому что он пользуется освобожденными и несколько пьяными отношениями с более важной фигурой выше, из-за использования Git Alternates и git gc, происходящих только периодически на серверах GitHub.

Боковое примечание: Bitbucket также может принять время для обновления указанного размера репо.

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

Полное раскрытие: я являюсь автором BFG Repo-Cleaner.

Ответ 2

Нажимайте без флага --all, то есть do

git push origin --force

и это должно позаботиться об этом.

EDIT: Импровизация при обсуждении в комментариях

  • Вы можете создать новое репо на github,
  • нажмите на него

    cd repo_directory
    git remote add new_origin url/to/new/repo
    git push new_origin --mirror
    
  • если все получится (ошибок нет)
    • переименуйте репозиции github (оригинал в фиктивное имя и новый для оригинала)
  • Удалите удаленный new_origin. Поскольку URL-адрес репозитория github должен быть таким же, как только вы переименовали материал, исходная запись для [origin] в .git/config должна быть хорошей, и вам нужно только удалить новый удаленный файл.

    git remote rm new_origin
    

Ответ 3

Если это возможно:

  • переименуйте текущий репозиторий GitHub
  • создать новый с тем же именем
  • снова нажмите на ваш пустой репозиторий GitHub (git push --mirror)
  • проверьте, сохраняется ли предупреждение размера в новом GitHub rpeo