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

Восстановление всех изменений в истории git после фильтрации

В нашем реестре git имеется большая папка больших файлов, которые больше не нужны. Я хочу удалить их, используя технику фильтра-ответвления, описанную в Pro Git:

http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery

Затем я использую git push --force all, чтобы отправить это в наш общий репо, как описано здесь:

Обновите команду разработчиков, переписав историю репо, git, удалив большие файлы

НО. Pro git говорит, что мне нужно будет переустановить всех, так как я меняю историю. Мы только экономно использовали rebase, как правило, как альтернативный способ слияния. Я могу всех повторить, но это последнее средство; несколько разработчиков имеют локальные ветки с изменениями, которые они хотели бы сохранить.

Итак: что конкретно нужно будет делать в наших локальных хранилищах для перераспределения на недавно измененное разделяемое репо? И мы должны сделать это один раз в ветки отслеживания? Наше репо упоминается как источник, а главная ветка - мастер, если вы хотите дать пошаговые инструкции (и мне бы это понравилось, если бы вы были).

4b9b3361

Ответ 1

Ключ для каждого отдельного разработчика не терять свою исходную ссылку на master до тех пор, пока они не сделают свою перезагрузку. Чтобы сделать это, попросите их сделать fetch (не тянуть) после принудительного нажатия, затем для каждой локальной ветки выполните:

git rebase --onto origin/master master <local_branch>

Когда это будет сделано, они смогут проверить их master и обновить его:

git pull --force

Ответ 2

Вот вариант.

  • Создайте свой восстановленный мастер на ветке с именем rebased_master (вместо исходного master).
  • Вы бы просто нажмете эту ветку и попросите всех своих разработчиков вытащить ее и переустановите свои локальные ветки на rebased_master. Если они переустанавливают их эквивалентную фиксацию до переустановки и не имеют каких-либо изменений в файлах, которые вы удаляете, все должно быть хорошо.
  • Как только все переместили свои ветки dev на rebased_master, вы можете удалить свои оригинальные master и move rebased_master до master

Примечание. Я не тестировал это, поэтому убедитесь, что у вас есть копия вашего репо для восстановления, если что-то пойдет не так.