Я работаю в компании, которая использует CVS, поэтому HgSubversion не был вариантом. У меня был тот же вопрос несколько дней назад, и я разработал рабочий процесс на основе этого:
http://momentaryfascinations.com/programming/how.to.use.mercurial.for.local.source.code.management.with.a.public.subversion.server.html
Я создал репозиторий Mercurial, где находится мой CVS-репозиторий, который я считаю «только для чтения». Затем я клонирую это «только для чтения» репозиторий hg в рабочие репозитории, где я делаю изменения / исправления локально. Я клонировал репо для каждой сделанной мной функции и исправления, но вы также можете просто иметь один репо и использовать другую стратегию ветвления для управления своей разработкой. Вот хороший обзор таких стратегий.
Ключом к этому рабочему процессу является наличие этого «только для чтения» хранилища. Я делал свои изменения в первом созданном репозитории Mercurial, который был поверх CVS. Это работало, но сбивало с толку при обновлении с CVS. Имея этот дополнительный уровень, вы можете самостоятельно вносить изменения и обновляться из CVS.
Синхронизация с CVS
Когда бы ни происходили изменения в CVS, я делаю обновление cvs. Для репозитория hg «только для чтения» это будет отображаться как измененные файлы. Чтобы синхронизировать Mercurial, я просто делаю
hg ci -m "Updated from CVS."
(Итак, вы увидите много таких сообщений в моих журналах hg). На данный момент мой репозиторий "только для чтения" синхронизирован с CVS. Теперь я могу перейти к любому из клонированных репозиториев и выдать hg pull
, а затем hg update
для их синхронизации.
Передача изменений из hg обратно в CVS
В другом направлении, когда я захочу перейти на CVS, я попаду в один из моих рабочих репозиториев, где я уже внес свои изменения в hg. Затем я hg push
перехожу на «только для чтения», переключаюсь в «только для чтения» и делаю hg update
. С точки зрения CVS, это будет выглядеть как недавно измененный. Затем я делаю cvs commit
обратно в CVS. Здесь я должен буду повторить / обобщить в своем журнале сообщений работу, которую я проделал в моем репозитории hg.
По общему признанию, в этом рабочем процессе есть грубые пятна. Вы можете вносить несколько изменений в hg, что в сумме составляет всего одно изменение в CVS / SVN, так что история не будет храниться в CVS / SVN, и вам придется суммировать ваши сообщения о фиксации. Вы должны вручную управлять синхронизацией CVS и вашего репозитория «только для чтения». Преимущество этого в том, что вам не нужно устанавливать никаких дополнительных расширений - вы просто работаете с файлами с обеих сторон. Все, что происходит, довольно прозрачно и находится под вашим контролем.
Я все еще режу зубы на рту, но до сих пор этот рабочий процесс работал довольно хорошо.
Харви предоставил хорошую диаграмму этого и делает отличное замечание, что этот рабочий процесс применим к любой другой VCS:
альтернативный текст http://sr105.com/other_vcs_to_hg_workflow.png