2015-09-10 9 views
1

Вопрос об отмене предыдущего нажатия на удаленный репозиторий был задан несколько раз, но мне кажется, что ответы неполны. Следуя рекомендациям в Git - Undo pushed commits, я могу сбросить удаленный репозиторий, чтобы его поведение было таким, как будто последнее совершение никогда не происходило. Тем не менее, кажется, что эффекты отмененного фиксации все еще отображаются в размере репозитория git.git uno эффекты от нажатой фиксации на размер репозитория

Вот гипотетическая ситуация: пользователь делает git add, git commit, что ставит огромный файл, «BigFatFile.bin» в систему управления версиями. Он перенаправляет изменения в удаленный репозиторий. Предположим, что этот файл ОГРОМНЫЙ, возможно, 1 ГБ. Мы не хотим поддерживать такие файлы в git. Поэтому мы пытаемся отменить этот плохой фиксатор следующим образом:

  1. Клонировать удаленный репозиторий.
  2. Сделайте git reset --hard HEAD^, чтобы удалить последнюю фиксацию.
  3. Сделайте git push -f, чтобы внести изменения в удаленный репозиторий.

Это похоже на работу, за исключением того факта, что эффекты нажатия все еще видны в размере удаленного репозитория. Его размер вырос на 1 ГБ.

Можно на локальной копии репозитория делать шаги по очистке, используя git reflog и git gc и git repack, что уменьшает размер локального хранилища, каким он был до того, как совершить из «BigFatFile.bin». Но делать git push (или git push -f), похоже, не уменьшает размер удаленного репозитория.

Как я могу окончательно отменить последнюю нажатую фиксацию так, чтобы размер репозитория возвращался к тому, что было до нажатия?

ответ

1

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

Как я уже говорил в «Clean up large files on git server», вам необходимо выполнить команду git gc; git repack -Ad; git prune со стороны сервера, чтобы уменьшить размер репо.
В зависимости от сервера это может быть невозможно. Например, если это репозиторий, поддерживаемый GitHub, вам нужно связаться с поддержкой GitHub, чтобы обеспечить выполнение задачи очистки.

+0

Большое вам спасибо. У меня есть доступ к серверу (не GitHub), поэтому я могу запустить этот код. Я немного смутился о том, какие команды можно запускать в голом репозитории и какие команды не могут, поэтому я предположил, что очистка должна быть выполнена в клонированном репозитории, а затем нажата. –

+0

@DarylMcCullough вы можете использовать эти команды в голом репо на стороне сервера. – VonC

 Смежные вопросы

  • Нет связанных вопросов^_^