Mercurial из Subversion: перемещения, переименования и теги - PullRequest
2 голосов
/ 25 августа 2009

У меня есть репозиторий Subversion со следующим макетом:

svnrepo/projectA/trunk
svnrepo/projectA/tags
svnrepo/projectA/branches
svnrepo/projectB/trunk
svnrepo/projectB/tags
svnrepo/projectB/branches


который я хотел бы перенести в ртутный репозиторий с измененным макетом:
hgrepo / Projecta
hgrepo / projectB

Каков наилучший способ сделать это? Некоторые из моих мыслей:

Option1

Перестановка путей в Subversion (с помощью SVN Move) в промежуточный формат:

svnrepo/trunk/projectA
svnrepo/trunk/projectB
svnrepo/tags/projectA
svnrepo/tags/projectB
svnrepo/branches/projectA
svnrepo/branches/projectB

затем hg преобразовать в svnrepo / trunk. Будет ли это путать импорт hg?

Вариант 2 hg конвертирует каждый из проектов / trunk в отдельные репозитории hg. Затем объедините их в одно репозиторий hg (используя hg init, hg pull -f projectA и т. Д.). Я думаю, что это потеряет имена веток и теги в первом импортированном проекте.

Ответы [ 2 ]

6 голосов
/ 25 августа 2009

В Mercurial хранение несвязанных кодовых баз в одном и том же хранилище - плохая идея, потому что это будет

  • Значительно затрудняет слияние. Слияния будут зависеть от изменений, внесенных в всех проектов, а не только от проекта, который вы пытаетесь объединить.
  • Причиняет накладные расходы на хранение и извлечение. Насколько мне известно, Mercurial не поддерживает проверку только подкаталогов репозитория. Вы должны разветвить все проекты сразу.

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

4 голосов
/ 25 августа 2009

Каждый проект должен находиться в своем собственном репозитории Hg (чтобы можно было получить или пометить только определенный проект).

Помните, что каталог, который вы видите в Subversion (транк, теги, ветви), не будет существовать ни в одной современной (D) VCS, где ветви и теги являются гражданами первого класса (то есть метаданными, непосредственно управляемыми инструментом), так как в отличие от простого каталога, полученного из дешевой копии (в SVN).

Это означает, что когда вы конвертируете SVN-репозиторий, вы не должны напрямую хранить каталог "trunk", "tags" или "branch" в истории репозитория Hg.

Вы должны использовать инструмент , такой как hgsubversion, чтобы импортировать репозиторий SVN (например, просто «repo / projectA») в репозиторий Hg, посвященный projectA. он сохранит теги и ветви оригинального проекта SVN и преобразует их в объекты Hg.
С его документация :

Все обновления с использованием hgpullsvn производятся в ветви, названной из последнего компонента URL-адреса SVN (например, если URL-адрес SVN svn://server/myproj/branches/feature-ZZZ, hgpullsvn создаст и использует именованную ветку 'feature-ZZZ' )


Если вы не хотите «конвертировать», но «синхронизировать», tonfa рекомендуем hgsubversion, хотя в настоящее время он находится в состоянии изменения из-за интенсивного рефакторинга ":

На данный момент он не готов к использованию. Вы должны использовать это, только если вы готовы взломать его и погрузиться во внутренности Mercurial и / или Subversion.

Так как hgsvn также разрешают некоторую синхронизацию через hgpushsvn и hgpullsvn ... Я бы сейчас остановился на hgsvn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...