2010-12-13 2 views
1

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

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

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

На этом этапе я ожидаю, что mercurial лучше предоставит merge support, чем cvs.

Затем я передам свои изменения в репозиторий соединительных линий обратно в cvs.

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

ответ

1

Причина, по которой 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 не правы, это было милостиво долгое время).

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

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

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

+0

Лично я бы идти с 'расширением convert' рт.ст. первый, и посмотреть, если он может работать, где произошла дивергенция. Я не знаю, насколько хорошо он обрабатывает ветви, но я бы начал там. У меня никогда не было причин использовать его (к счастью) –

+0

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

0

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

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

0

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

http://hg.gerg.ca/cvs2svn

Смежные вопросы