Использование Mercurial для объединения ветки cvs - PullRequest
1 голос
/ 13 декабря 2010

В настоящее время моя компания использует cvs для контроля версий. У нас есть старая ветка кода, которая использовалась специально для одного клиента (не спрашивайте), которую мы хотели бы объединить с головой.

Из-за разницы между этой веткой и руководителем, я думаю, возможности Mercurial для слияния должны немного облегчить мою работу. Моя аргументация такова:

  1. Создание ртутных репозиториев из ветки и текущей главы.
  2. Слияние репо филиала с репо транка.

На этом этапе я ожидаю, что mercurial обеспечит лучшую поддержку слияния , чем cvs.

Тогда я отправляю свои изменения в хранилище стволов обратно в cvs.

Звучит ли этот подход? Приведет ли эта стратегия к менее болезненному слиянию, как мне кажется, или мне чего-то не хватает?

Ответы [ 3 ]

1 голос
/ 13 декабря 2010

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

Если вы сделаете что-то вроде этого:

hg init newrepo
cd newrepo
cvs checkout POINT_OF_DIVERGENCE
hg commit --addremove -m 'commiting point of divergence'
cvs checkout BRANCH
hg addremove --similarity 90 # let Mercurial discover any renames
hg commit -m 'committing branch head'
hg update -r 0               # jump back to point of divergence
cvs checkout HEAD
hg addremove --similarity 90 # let Mercurial discover any renames
hg commit -m 'commiting HEAD head'
hg merge

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

Проблема в том, что в репозитории CVS находится POINT_OF_DIVERGENCE - CVS вообще этого не отслеживает, поэтому собственное слияние не использует его.

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

Безправильный последний предок, Mercurial Merge не будет лучше, чем CVS.

0 голосов
/ 10 июня 2011

Встроенное расширение для преобразования не будет хорошо работать с CVS, за исключением очень простых историй.Используйте форк cvs2svn под названием cvs2hg

http://hg.gerg.ca/cvs2svn

0 голосов
/ 13 декабря 2010

Да, это должно работать, но на этом пути могут быть небольшие проблемы (например, как получить исходный код из CVS в Mercurial: использование hg convert или ручной импорт определенной ревизии и т. Д.).

Пожалуйста, создайте новый вопрос, если у вас возникнут проблемы.

...