Слияние устаревшей ветки с HEAD в CVS (Eclipse)

По сути, у нас есть ветка (назовем ее B, она содержит определенный код ветки), которую нужно объединить с HEAD. Проблема в том, что ветка была создана давно. С тех пор HEAD много раз обновлялся, добавлялось множество новых функций и исправлялось множество ошибок. В ветке B все еще есть большинство ошибок, уже исправленных в HEAD, и в ней отсутствуют некоторые функции. Итак, что нужно сделать, так это взять некоторые функции ветви B (вероятно, около 50 файлов, которые содержат новую функциональность - я точно не знаю, что это за файлы), оставив остальную часть HEAD нетронутой.

В настоящее время инструмент слияния в Eclipse сообщает о более чем 1700 изменениях, выполняя автоматическое слияние, перезаписывая код в HEAD кодом из ветки (таким образом, внося уже исправленные ошибки). Есть ли лучший способ решить эту проблему, вместо того, чтобы просматривать все 1700 изменений и объединять их вручную?


person tomsky    schedule 27.02.2013    source источник
comment
Вы отметили основание ветки?   -  person parsifal    schedule 27.02.2013
comment
Люди TIL все еще используют CVS. Лично я бы порекомендовал преобразовать все это в Subversion, а затем попытаться сделать это, но, вероятно, существует особая причина, побуждающая продолжать использование CVS, не так ли?   -  person Alan Krueger    schedule 27.02.2013
comment
@parsifal: Да, я считаю, что есть начальный тег.   -  person tomsky    schedule 27.02.2013
comment
@Alan Krueger: Это своего рода устаревший проект, и я боюсь, что у нас нет никаких шансов прекратить использование CVS.   -  person tomsky    schedule 27.02.2013


Ответы (1)


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

Начните с проверки основания и кончика ветки в отдельные каталоги. Вы сказали, что у вас есть базовый тег, который ставит вас впереди 99% людей, использующих CVS. Если это не так, вы можете оформить заказ на основе даты. Найти правильную дату будет непросто; самый простой способ — посмотреть в журнале файл, который, как вы знаете, не был изменен в ветке, и отследить, где эта ветка появляется в истории изменений.

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

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

В качестве альтернативы можно открыть три окна: Окно №1 — это файл исправления, в котором будут указаны файлы, которые были изменены, и что в них изменилось. Окно № 2 — это файл на (конце) ветки, поэтому вы можете видеть, что он делает в данный момент. Окно № 3 — это файл в вашем багажнике. В этом подходе вы копируете код из № 2 в № 3, где это имеет смысл, а № 1 используется просто как руководство к тому, что копируется.

Как бы то ни было, в то время как CVS особенно болезненна при ветвлении и слиянии, никакая VCS не хороша для слияния сильно расходящихся ветвей (независимо от того, что говорит Джоэл).

person parsifal    schedule 27.02.2013