Предложения по сложному объединению WinForms с Subversion? - PullRequest
2 голосов
/ 15 августа 2011

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

Это многопроектное решение VS2008 с использованием WinForms.Другие проекты в основном поддерживают библиотеки DLL для основного проекта, который в основном состоит из кода пользовательского интерфейса.

Мы используем и Ankh, и Tortoise.

Во всех проектах было несколько изменений, но я толькохочу объединить некоторые изменений в ветке.

Я использую TortoiseMerge, объединяю свою основную форму, собираю, а затем объединяю связанные проекты на основе ошибок компиляции, но это происходиточень медленно.

Проблемы, с которыми я сталкивался:

  • объединение изменений в формы, которые касаются как файлов .cs и .designer.cs
  • изменения, которыезависит от изменений в других проектах, которые касаются еще большего количества проектов и т. д.

Есть предложения о том, как лучше поступить?

Ответы [ 2 ]

1 голос
/ 17 августа 2011

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

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

Файлы Winforms .designer.cs - самая большая проблема.Дизайнер VS много перемещает, когда вы добавляете новые элементы управления, и это создает всевозможные конфликты при попытке объединения, которые трудно разрешить.

Редактировать

Вот что я в итоге сделал:

  1. Открыл как проект ствола, так и ответвления в отдельных экземплярах Visual Studio
  2. Для каждой формы скопировал и вставил новые элементы управления из ствола в ответвление, используядизайнеры VS IDE.Это гарантировало, что файлы .designer.cs были бы действительными.
  3. Использовал WinMerge , чтобы построчно объединять файл формы .cs, поэтому я взял только те изменения, которыев розыске.(В некоторых случаях - когда я хотел все изменения - я просто копировал весь файл (ы) из ствола в папки филиала.)
  4. Попытка построить проект, который обычно вызывал ошибки компиляции
  5. Исходя из ошибок, объединяйте другие файлы с WinMerge, пока у меня не будет чистой компиляции
  6. Повторяйте шаги, описанные выше, пока все нужные функции не будут объединены
  7. Протестированы все объединенные функции

Все прошло довольно гладко, когда я разобрался с базовым подходом.

1 голос
/ 16 августа 2011

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

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

EDIT

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

...