Рекомендации по переносу пользовательских модификаций кода в новую основную версию программного обеспечения с открытым исходным кодом?

#version-control #merge #smf-forum

#контроль версий #слияние #smf-форум

Вопрос:

У меня (грязная) производственная установка Simple Machines Forum (SMF 1.1.13). Когда-то это была чистая установка… около пяти лет, двадцать обновлений и 40 модификаций назад. Не говоря уже о пользовательском коде, который был исправлен непосредственно в кодовой базе. Это начиналось как побочный проект для развлечения, и с самого начала в нем не было никаких методов управления кодом.

Теперь SMF 2 (приближается к запуску), и я хочу обновить. Но без отказа от пользовательских функций.

Продолжайте читать, это общий вопрос управления программным обеспечением, а не вопрос поддержки SMF…

Я пытаюсь найти наилучший способ переноса пользовательских функций в новую ветку code.

  • В некоторых случаях пользовательские функции 1.1.x уже будут существовать в версии 2.0. Ура, у меня ничего не получается!
  • В некоторых случаях будут пакеты модов с версиями для 2.0, и я могу просто установить их непосредственно в чистую сборку SMF 2. Ура, минимум работы для меня!
  • В некоторых случаях перенос кода между двумя версиями будет довольно простым (например, несколько небольших изменений в запросах или построение глобальных переменных). (Я вернул несколько функций / модов с 2.0 на 1.1.x, так что я начинаю знакомиться с этим.)
  • В некоторых случаях мне просто придется переделывать функции в основном с нуля.

Этими последними двумя вариантами будет сложно управлять.

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

  • Разница между чистой версией 1.1.x и моим «грязным» производственным кодом
  • Сопоставьте каждое различие в строке с функцией («Это обновление кода — это функция пользовательских тегов, придется переносить ее построчно, а вон то — галерея, я, вероятно, смогу установить обновленный мод.») Это было бы намного ПРОЩЕ, если бы существовал инструмент diff, который генерирует сводный отчет, вместо того, чтобы просматривать десятки файлов по одному за раз. Поисковые запросы Google и SO не нашли подобного инструмента — Есть ли он?
  • Установите чистую ветку 2.0
  • Установите доступные обновленные моды
  • Закатываю рукава и просматриваю свои различия функция за функцией (это? вот почему мне нужен сводный отчет о различиях. Было бы чертовски сложно делать страницу за страницей.) и встраивать их обратно.

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

В противном случае? Я боюсь, что мои варианты — отказаться от пользовательских функций (что на самом деле неосуществимо) или остаться на старой ветке. Оба отстой. Помогите!

tl; dr: Укажите мне на инструмент diff, который будет создавать сводные отчеты о различиях по файлам для целых каталогов. И / или помогите мне найти более простой способ переноса моего пользовательского кода.

Ответ №1:

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

Отойдите от размышлений об изменениях на уровне кода и рассмотрите изменения функций и поведения на уровне приложения. Какие функции внесли ваши изменения? Каким образом ваше приложение теперь ведет себя по-другому из-за внесенных вами изменений?

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

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

  • Установите версию vanilla 2.0
  • Примените все подходящие моды
  • Примените соответствующий стиль
  • Используйте новую систему, обратите внимание на различия в поведении и разработайте на основе этого набор необходимых функций

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

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

Комментарии:

1. Спасибо. Я (думаю), у меня есть довольно хороший список функций, добавленных в старую кодовую базу. Или, по крайней мере, что я мог бы довольно легко дополнить это. Вы правы, что первое, что мне нужно будет сделать, это ознакомиться с кодовой базой 2.0 (и функциями!), чтобы увидеть, что мне вообще нужно добавить. Я начал анализ на уровне кода следующим образом: выпуск версии vanilla 1.0; установите контроль версий; применяйте моды по одному за раз (тьфу, отнимает много времени! но это необходимо, поскольку я все равно сейчас создаю новый зеркальный сервер); тогда у меня должен быть хороший отчет TortoiseSVN между ванилью и пользовательскими модификациями 1.0.

2. Тогда я могу перенести пользовательские хаки, либо все в один большой порт (к сожалению, мой репозиторий svn не такой старый, как мои хаки). ЗАТЕМ создайте установку vanilla 2.0, поиграйте с ней, перечислите разницу функций и посмотрите, что нуждается в обновлении. Вау, я устал просто думать обо всем этом. Хорошо, что прошло по крайней мере 6 месяцев!