Практика контроля версий для Rewrites

29

Мы разработали продукт (прототип) P_OLD на языке X и теперь переписываем его с нуля как P_NEW на языке Y.

Поскольку P_NEW и P_OLD - это один и тот же продукт:

Должен ли P_NEW быть частью P_OLD старого или это должен быть собственный репозиторий?

Как обычно обрабатывать такие большие изменения с точки зрения управления версиями?

1v0
источник
@gnat Спасибо за ссылку. Это интересно, но главное отличие в том, что для нас это один и тот же продукт, только полностью переработанный. Старый проект был в основном (безобразным) прототипом.
1v0

Ответы:

46

Вы почти наверняка хотите новый репозиторий.

Целью хранилища является:

  • отслеживать историю и изменения, чтобы вы могли легко сравнить их
  • управлять ветвлениями и слияниями, а не просто рассылать по почте файлы патчей и применять их в рабочих каталогах вручную

Если вы полностью переписываете проект с нуля, то нет смысла переписывать его в тот же репозиторий. Вы не сможете применить патчи, написанные на старом языке, к вашей перезаписи. Смена репо не приведет к исчезновению истории в старом репо, и, если вы переключитесь, у вас не будет никаких странных промежуточных этапов, когда у вас будет два языка в репо.

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

user52889
источник
2
В зависимости от продолжительности перехода, полезно иметь предыдущий живой и легко доступный для сравнения. Возможно, вы даже вводите тестовые примеры в старой системе, чтобы помочь вам проверить соответствие результатов в новой системе.
Эрик
16

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

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

dsw88
источник
5

Если ваши системы достаточно модульны и совместимы по ссылкам, вы сможете воспользоваться одним репозиторием и сборкой. Например, если система C переписывается на C ++, код C ++ может вызвать существующую функциональность и постепенно заменить ее.

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

Кит
источник