В течение последних нескольких месяцев я работал над масштабным проектом обновления 11-летнего приложения, которое состоит из более чем 3500 отдельных файлов. В какой-то момент файлы были скопированы (ими управлял SVN, потом …), и начались конверсионные работы параллельно с продолжением работы по поддержке клиента.
В хранилище конверсий (который совершенно не связан с «другим» git-репозиторием, который вытеснил SVN), было сделано около 314 коммитов, и некоторые из них гигантские. (Преобразование <?
в <?php
, замена mysql_
звонки с вызовами в интерфейсную библиотеку и тд.)
Теперь задача состоит в том, чтобы принести около 120 файлов, которые изменились в «другом» репо (который в конечном итоге должен быть оставлен …) в этот. До сих пор мой подход заключался в создании ветви, копировании файлов в эту новую ветку и повторном применении «базовых» изменений, таких как описанные выше, с использованием инструментов автоматического анализа кода, которые я разработал для этой цели.
И здесь я не уверен, что делать дальше. Я хочу повторно внести изменения, которые я внес в эти файлы, как это отражено в 300 с лишним коммитах, которые сейчас выполняются в основной ветви моего конверсионного репо, и сделать это как можно скорее автоматически. У меня есть файл, который содержит список всех файлов, о которых идет речь. Моя мысль cherry-pick
некоторые из старых коммитов выходят из основной ветки и применяют их к файлам в новой ветке (который никогда не может быть объединен с мастером). На мой взгляд, только те коммиты, которые касаются любого из этих файлов, должны быть повторно применены. (Но некоторые из этих коммитов затрагивали тысячи файлов, в том числе, но не ограничиваясь теми, что находятся здесь.)
На данный момент я стою на пороге решения, еще ничего не сделав, и не совсем уверен, как лучше поступить.
Помните: есть два отдельных git
репо, но они совершенно не связаны с другим. (Тот, который использовался для сопровождения производства, в то время даже не существовал.) Итак, я могу использовать его … и, действительно, использовал его … только для получения списка файлов, к которым были произведены прикосновения, и для получения их самая последняя версия. Когда проект конвертации будет завершен, конверсионный репо будет отбрасываются, и нынешний репо будет заморожен. Будет создан совершенно новый репо, чтобы двигаться вперед.
Совет искренне искал. , ,
РЕДАКТИРОВАТЬ: С тех пор я рассмотрел совершенно другой подход, который позволил бы отказаться от курса, который я начал, полностью отбросить эту ветвь и следовать другой стратегии прохождения старого репозитория, захвата выбранных коммитов в качестве патчей и попытки применить эти патчи к существующим (хотя, возможно, очень измененным) модулям. Или, если нужно, делать то же самое вручную. Только около 100, дай или возьми, обязуется сделать … Комментарии сердечно (и искренне) запрашиваются по любой стратегии.
Я не уверен, что это именно то, что вы ищете, но мое предложение будет использовать Gitflow Workflow.
Как это работает, у вас есть основная ветка под названием master
где основной код существует. Этот код всегда является последним стабильным кодом для проекта.
Рядом с этой веткой develop
ветка. Эта ветвь содержит весь прогресс развития. Дополнительные функции могут быть разветвлены от develop
и вернули в более позднее время, когда они закончили. Исправления также могут быть разветвленными от develop
, В вашей ситуации вы можете develop
ветвь для каждой из ваших миграций, то есть добавление одной функции за раз.
Когда develop
ветка стабильна и пришло время для выпуска, вы можете затем объединить develop
ветвь с master
, Я использовал этот тип рабочего процесса для некоторых из моих крупных проектов, и он мне очень помог.
Ниже приведена схема, которая показывает, как может выглядеть этот тип рабочего процесса. Круги отмечены цветной легендой. Если у вас есть какие-либо вопросы или вам нужна дополнительная информация от меня, пожалуйста, не стесняйтесь, дайте мне знать.
Других решений пока нет …