Вытащить / клонировать svn-репозиторий в hg с новым именем ветки по умолчанию? - PullRequest
1 голос
/ 15 января 2011

Я разрабатываю репозиторий SVN проекта и должен быть интегрирован в репозиторий Mercurial.Для простоты у меня есть локальный репозиторий hgsubversion и локальный репозиторий hg.Однако и хранилище mercurial и hgsubversion использует default в качестве имени ветви по умолчанию.Моя цель заключается в том, чтобы поместить исходный код и обновления в одну ветку, а мой код в default ветку

Однако я пока не смог этого сделать.

W:\programming\tcsite-svn-test>hg clone http://*HG_SITE*/hg .
no changes found
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

W:\programming\tcsite-svn-test>hg branch blizzard
marked working directory as branch blizzard

W:\programming\tcsite-svn-test>hg commit

W:\programming\tcsite-svn-test>hg log
changeset:   0:be13a9580df0
branch:      blizzard
tag:         tip
user:        Leon Blakey <lord.quackstar@gmail.com>
date:        Fri Jan 14 23:44:25 2011 -0500
summary:     Created Blizzard Branch

W:\programming\tcsite-svn-test>hg pull http://*SVN_SITE*/svn/
pulling from http://*SVN_SITE*/svn/
....
pulled 23 revisions
(run 'hg update' to get a working copy)

W:\programming\tcsite-svn-test>hg branch
blizzard

W:\programming\tcsite-svn-test>hg branches
default                       23:93642a8890ab <------
blizzard                       0:be13a9580df0

Не удивительно, что hgsubversion помещает запертые коммиты в ветку default, когда они мне действительно нужны в ветке blizzard.Из документов нет способа переименовать ветку, из которой поступил коммит.

К сожалению, я не могу даже придумать способ сделать это в репо, из которого извлекается только репозиторий hgsubversion,ничего больше.Все коммиты привязаны к этой одной ветке, несмотря ни на что.

Есть ли какие-либо предложения о том, как получить изменения из репозитория SVN и переименовать ветку в другое?

1 Ответ

5 голосов
/ 15 января 2011

У вас есть несколько вариантов здесь.

С одной стороны, встроенное расширение 'convert' значительно более гибко для односторонних преобразований и может легко справиться с этим, используя опцию --branchmap.Тем не менее, hgsubversion предоставляет приятные функции для синхронизации обратно в SVN, которые не предоставляются, если вы используете hg convert.

В этом случае, возможно ли будет просто переключиться вокруг вашей схемы именования?Использовать default для случая 'import from svn' и использовать local или что-то подобное для ваших локальных изменений?Затем вы можете назвать независимые проекты на базе кода с разными названиями.Я использовал подобный механизм в прошлом.

РЕДАКТИРОВАТЬ: Просто поймал это в hgsubversion документации :

hgsubversion.branch

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

«Стандартные клоны макетов» почти наверняка означают клонирование всего проекта, включая / tags, / branch & / trunk обычным способом svn.

Если я правильно понимаю, вы сможете сделать что-то вроде

hg --config hgsubversion.branch=blizzard clone <svn-repo/trunk>

Не уверен, нужно ли добавлять эту строку --config при каждом обновленииот svn, но небольшой эксперимент должен подтвердить это.

Если по какой-то причине это не сработает, функция hgsubversion.branchmap также доступна,

...