Могу ли я использовать Mercurial локально и обновлять из / push в хранилище Subversion? - PullRequest
9 голосов
/ 23 марта 2010

Как фрилансер, я часто работаю в компаниях, которые используют репозитории Subversion.

Было бы удобно, если бы я мог использовать Mercurial для получения кода из этих репозиториев, отслеживать мои изменения, когда я не в сети, а затем фиксировать все свои локальные изменения на сервере Subversion компании, когда я снова в сети.

Это работает? Вы читали какие-нибудь хорошие учебники по специфике?

Ответы [ 3 ]

8 голосов
/ 24 марта 2010

Я работаю в компании, которая использует 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

5 голосов
/ 23 марта 2010

Попробуйте HgSubversion . Это позволяет вам сделать это. Вы можете клонировать (частично) svn-репозиторий локально в hg-репозиторий и работать с hg локально и svn удаленно (push и pull делают то, что от них ожидают)

Я использовал его с некоторым успехом в прошлом, но не имею большого опыта работы с ним.

2 голосов
/ 23 марта 2010

Вы можете найти информацию на этой вики-странице .

...