Как фрилансер, я часто работаю в компаниях, которые используют репозитории Подверсии.
Было бы удобно, если я мог бы использовать Подвижный, чтобы получить код из этих репозиториев, отследить мои изменения, когда я в режиме офлайн, и затем передаю все свои локальные изменения в сервере Подверсии компании, когда я назад онлайн.
Это работает? Вы прочитали какие-либо хорошие учебные руководства на специфических особенностях?
Попробуйте HgSubversion . Это позволяет вам делать именно это. Вы можете клонировать (часть) репозитория svn локально в репозиторий hg и работать с hg локально и svn удаленно (push и pull делают то, что вы от них ожидаете).
Раньше я использовал его с некоторым успехом, но у меня нет большого опыта работы с ним.
Я работаю в компании, использующей CVS, поэтому HgSubversion не подходил. У меня был тот же вопрос несколько дней назад, и я разработал рабочий процесс, основанный на этом:
Я создал репозиторий 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 нажимаю
свои изменения обратно в режим «только для чтения», перехожу в репозиторий «только для чтения», выполняю hg update
. С точки зрения CVS, это будет выглядеть как недавно измененное. Затем я делаю cvs commit
обратно в CVS. Здесь мне придется повторить / резюмировать в своем сообщении журнала работу, которую я проделал в моем репозитории hg.
По общему признанию, в этом рабочем процессе есть неровности. Вы можете вносить несколько изменений в hg, что в сумме составляет всего одно изменение в CVS / SVN, так что история не будет храниться в CVS / SVN, и вам придется суммировать свои сообщения о фиксации. Вы должны вручную управлять синхронизацией CVS и репозитория, доступного только для чтения. Преимущество этого заключается в том, что вам не нужно устанавливать никаких дополнительных расширений - вы просто имеете дело с самими файлами с обеих сторон. Все, что происходит, довольно прозрачно и под вашим контролем.
Я все еще режу зубы на hg, но пока этот рабочий процесс работает достаточно хорошо.
Харви предоставил прекрасную диаграмму этого и подчеркивает, что этот рабочий процесс применим к любой другой VCS:
(источник: sr105.com )
Вы можете найти некоторую информацию на этой вики-странице.