У меня есть главный репозиторий git и еще один репозиторий, который содержит код, который когда-то был просто скопирован из другой кодовой базы без истории, но затем снова версирован git.

Таким образом, второй репозиторий имеет гораздо более молодую историю, начиная с некоторого состояния, которое присутствует как один коммит в главном репозитории.

Что было бы лучшим способом снова объединить этот беспорядок? Я думаю, что сначала мне нужно выяснить, при каком коммите была сделана копия, как это сделать? Как объединить хранилище как новую ветку, но с полной историей?

1 ответ1

0

Прежде всего экспортируйте патчи старого репо.

Применяйте патчи один за другим, последовательно на новом репо. Некоторые из первых должны вызывать у вас конфликты. Это должны быть те, которые уже есть в хранилище. Как только вы получите тот, который не выходит из строя, вы можете начать оттуда, чтобы создать измененную историю в новом репо.

Ниже приведены проблемы с этим методом:

  • нужно совершить по одному.
  • сообщение об авторе и коммите потеряно.

Есть еще один метод, который заключается в грубой форсировке хэша коммита (см. Gitbrute) первого неконфликтующего коммита. А затем создайте связку репо от этого коммита до последнего коммита в старом репо. Примените этот комплект к новому репо.

Брут-форсирование хэша коммита - нелегкая задача, так как просмотр проекта, в котором установлен префикс коммита, поможет вам начать работу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .