Вы можете сделать это как с Mercurial, так и с Git - оба проекта имеют двусторонние мосты для взаимодействия с Subversion.
Для Mercurial Джо будет использовать hgsubversion , чтобы получить MercurialРепозиторий на его машине с полной историей Subversion.Затем он развивается как обычно, используя Mercurial.Он будет постоянно извлекать новые ревизии с сервера Subversion и перебирать свои собственные наборы изменений поверх них.
Итак, давайте представим, что Джо сделал три набора изменений поверх ревизии 2 из SVN:
... R1 --- R2 --- J1 --- J2 --- J3
Затем он извлекает новые наборы изменений из Subversion (просто hg pull
- hgsubversion поймет, что он должен постепенно преобразовывать новые ревизии Subversion в Mercurial наборы изменений).Результат:
... R1 --- R2 --- J1 --- J2 --- J3
\
R3 --- R4
, где новая ветвь представляет новые ревизии Subversion.Поскольку Subversion является линейным, он должен перебазировать свою работу поверх новой ветви:
... R1 --- R2 --- R3 --- R4 --- J1 --- J2 --- J3
Он продолжает работать так, всегда перебазируя вместо слияния, и когда приходит время отправить изменения обратно, онпросит вас или кого-либо еще с правами на коммит в хранилище Subversion вытащить его хранилище Mercurial.Вы получаете
... R1 --- R2 --- R3 --- R4 --- R5 --- J1 --- J2 --- J3 --- J4
и теперь можете помещать наборы изменений J1-4 в Subversion:
... R1 --- R2 --- R3 --- R4 --- R5 --- R6 --- R7 --- R8 --- R9
История сохраняется: четыре набора изменений становятся четырьмя ревизиями в Subversion.Пожалуйста, смотрите мое руководство для получения дополнительной информации и красивые картинки.