git переписать историю на удаленном - PullRequest
2 голосов
/ 14 февраля 2020

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

Я допустил несколько очень и очень серьезных ошибок в своем репо git, которые привели к тому, что он увеличился до нескольких гигабайт! К счастью, это мое личное репо, поэтому я переписал историю, чтобы удалить все ошибки. Я следовал этим инструкциям , в основном:

  1. Найдите все файлы, которые я хочу удалить.
  2. Используйте git -filter-branch для их удаления.
  3. Удалить записи из журналов и ссылок
  4. Повторный сбор мусора.

Делая это, я сократил репо с нескольких гигабайт до одного мегабайта, ура ! Я получил git push origin --force --all, и все успешно обновилось.

Теперь я хочу клонировать мой репо в новую систему, чтобы проверить, что мое переписывание работает. Когда я клонирую, я получаю это:

remote: Enumerating objects: 6359, done.
remote: Counting objects: 100% (6359/6359), done.
remote: Compressing objects: 100% (4857/4857), done.
fatal: The remote end hung up unexpectedly 1.70 GiB | 3.05 MiB/s

Это кажется мне странным. Прежде всего, мой репо уже не несколько гигабайт, а всего 1 мегабайт. Кроме того, у меня нет 6539 объектов. После переписывания у меня только 2128 объектов. Похоже, что он загружает репо, прежде чем я нажал на переписывание.

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

Спасибо!

PS Репо находится на битбакете.

1 Ответ

1 голос
/ 14 февраля 2020

Дважды проверьте, что на битбакете нет старых веток, указывающих на нефильтрованную версию проекта. Возможно, например, что bitbucket защищает основную ветвь от принудительного нажатия, поэтому она все еще указывает на старый код. Выполнение git fetch затем gitk --all --remotes в вашем старом репо должно быть хорошим способом показать вам состояние восходящего репо.

Удаленный конец не должен был неожиданно зависать в любом случае, даже если был много данных для скачивания. Это звучит как проблема с вашим подключением inte rnet или с битбакетом.

Примечание. Переписывание истории - это вполне разумная вещь в подобных случаях, или, например, если вы передали секретную информацию или информацию, защищенную GDPR, в ваш репозиторий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...