Рабочий процесс SVN & DVCS - сохранение истории - PullRequest
2 голосов
/ 13 апреля 2011

Можно ли создать оптимизированный рабочий процесс, используя как VCS (предпочтительно SVN), так и DVCS (предпочтительно Mercurial или Git)?

Следующие факты описывают желаемый рабочий процесс:

  • Существует один центральный сервер VCS.
  • Основная разработка происходит на центральном сервере.
  • Любой, кто не входит в группу разработчиков ядра (назовем его Джо), может сделать снимок исходного кода с полной историей.
  • Джо хотел бы разработать функцию в своей собственной ветке.
  • Джо не имеет разрешения на запись в VCS, поэтому
  • Он разрабатывает локально и принимает участие в собственном репозитории DVCS.
  • Когда он заканчивает, он связывается с главным администратором репо, чтобы объединить свою работу с центральным.

И тут возникает сложная часть: может ли его работа быть объединена с центральным репо с сохранением его истории ? Чтобы основная команда разработчиков могла отслеживать отдельные коммиты Джо?

Я бы хотел узнать что-нибудь, что могло бы указать мне правильное направление. Если рабочий процесс не невозможен для реализации, не стесняйтесь бросать ссылку на учебное пособие. Если у вас уже есть опыт работы с VCS-DVCS, пожалуйста, поделитесь им. Если это невозможно реализовать, то информация для меня также очень важна.

Я знаю, что вопрос может показаться похожим на другие (например, vcs или рабочий процесс dvcs ), но я не смог найти никаких подсказок, сохранена ли история.

Ответы [ 3 ]

7 голосов
/ 14 апреля 2011

Вы можете сделать это как с 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.Пожалуйста, смотрите мое руководство для получения дополнительной информации и красивые картинки.

2 голосов
/ 30 июля 2012

Вы можете использовать SubGit , чтобы сделать хранилище Subversion доступным для пользователей Git.

SubGit - это, по сути, пара скриптов-хуков, которые нужно установить в репозиторий для обеспечения двунаправленной синхронизации. После установки каждая ревизия SVN и коммит Git, отправленные в хранилище, преобразуются SubGit.

SubGit сохраняет не только естественную историю (ревизии и фиксации), но также историю слияний, метаданные, связанные с файлами, и т. Д. Более подробную информацию вы можете найти в документации и сравнении git-svn .

SubGit - коммерческий проект, но есть несколько бесплатных опций.

1 голос
/ 13 апреля 2011

Вы можете использовать поддержку подрывной деятельности git для взаимодействия с центральным репозиторием - вы можете перенести изменения обратно в центральное состояние с помощью "git svn dcommit"

http://git -scm.com / документы / ГИТ-SVN

...