Мигрируйте SVN в HG, разбивая его на подпункты (но сохраняя объединенный журнал) - PullRequest
1 голос
/ 22 апреля 2011

У меня есть SVN-репозиторий, который содержит несколько слабо связанных подпапок в своей стволе.
Я хотел бы преобразовать его в HG-репозиторий, превратив каждую из этих подпапок в отдельный подпункт HG.
ВВ то же время я хотел бы получить доступ к комбинированному журналу изменений всех вложенных репозиториев в репо верхнего уровня.

Поэтому я создал пустое репозиторий HG, некоторые пустые репозитории, связал их имена и местоположения с помощью .hgsub, проверил, что ямогу клонировать этот репозиторий вместе с его вложенными репозиториями в другой комп ...

Затем я попытался сделать частичные клоны SVN для субреппозиций (указав URL-адрес SVN с ... / trunk / подпапкой для каждого субрепортера).Но они не показывались в истории высокого уровня по неизвестной мне причине.

Я начал с нуля и попытался поместить URL транка SVN в файл верхнего уровня .hg / hgrc и выполнить команду «hg pull».Но это вывело весь репозиторий SVN на верхний уровень, и подпункты остались пустыми.

А теперь я бы спросил вас, что делать дальше?
Возможно, я что-то упустил, так как я новичок в HG.Буду признателен за любые ваши советы.

1 Ответ

2 голосов
/ 22 апреля 2011

Отчет об истории изменений и статусах отдельных файлов становится немного сложнее, когда речь идет о подпунктах Hg.

История изменений

История ревизий вложенного репозитория не видна из родительского репозитория. Это имеет смысл, когда вы думаете об этом, потому что каждый подпункт буквально является отдельным репозиторием - на самом деле нет хорошего способа наложения двух отдельных историй, и при этом эта информация не будет очень полезной. Из командной строки вам нужно будет перейти в каждый каталог subrepo и выполнить hg log, чтобы увидеть историю. В TortoiseHg 2.X.X, в представлении коммит , вы можете дважды щелкнуть по чему-либо, помеченному S, чтобы открыть этот подпункт в графическом интерфейсе TortoiseHg.

Локальные модификации

Локальные изменения в подпунктах можно увидеть из родительского репозитория, но не обязательно таким же образом для каждой команды. Например, если у меня есть репозиторий, который выглядит следующим образом (где sub является подпунктом):

/project
  |
  ----> foo.c
  |
  ----> sub/
         |
         ----> bar.c
         |
         ----> more.c

Если я изменю как bar.c, так и foo.c, а затем выполню hg status из командной строки, я увижу следующее:

> hg status
M    foo.c

Но если я добавлю аргумент subrepo -S, я бы увидел:

> hg status -S
M    foo.c
M    sub/bar.c

Если я использую TortoiseHg v2.X.X, он пометит foo.c как измененный и пометит sub как измененный, но мне нужно будет дважды щелкнуть вложенный репозиторий, чтобы просмотреть текущие изменения файла.

Примечания к конверсии:

С точки зрения выполнения самого преобразования - ознакомьтесь с расширением convert репозиторий . Если вы выполняете однократное преобразование, а затем отказываетесь от репозитория SVN, вероятно, это все, что вам нужно. Если вы собираетесь попробовать работать между SVN и HG, у вас, вероятно, возникнет еще несколько проблем.

В прошлом я успешно справлялся с наложением репозитория Hg поверх существующего репозитория. Однако я не уверен, что это сработает для SVN и Hg.

...