конвертировать старый репозиторий в Mercurial - PullRequest
2 голосов
/ 26 марта 2010

Я играл с разными системами управления версиями, чтобы найти ту, с которой мне удобно. Я начал с SVN (давайте назовем эту версию проекта "f1"), затем переключился на GIT. Но я не знал, как преобразовать старый репозиторий SVN в GIT, поэтому я просто скопировал папку, удалил материал .svn и превратил его в репозиторий GIT (давайте назовем эту скопированную версию "f2").

Сейчас я играю с Mercurial и был очень рад обнаружить, что у него есть клиент Tortoise для Windows. Мне также было приятно узнать, насколько легко было преобразовать репозиторий GIT в Mercurial, поэтому я сохранил историю (на всякий случай я все же сначала ее клонировал. Поэтому я называю эту версию hg "f3").

Но вот что меня интересует: что мне делать со старым репозиторием SVN, который до сих пор хранит мою историю от до Я играл с GIT?

Полагаю, я могу преобразовать старый репозиторий SVN в Mercurial, но могу ли я затем объединить эти две истории в один репозиторий, чтобы у меня был полный набор историй в одном месте? Другими словами, могу ли я добавить f1 к f3?

Ответы [ 2 ]

2 голосов
/ 26 марта 2010

Вы не можете добавить f1 к f3 в буквальном смысле истории / предка без фундаментального изменения f3, потому что каждая ревизия в mercurial идентифицируется с помощью хеш-кода, и этот хеш-код создается из (среди прочего ) содержание ревизии и хешей ее родителей. Таким образом, изменение родителя первого узла f3 изменит все хеш-коды f3.

Таким образом, вы можете добавить f1 к f3, если хотите регенерировать f3 в процессе, дающем, скажем, f4. Это сделало бы недействительными все клоны f3, но если вы команда из одного человека, с вами все будет в порядке.

Если вы не согласны с изменением каждого хэша в f3 (и я бы не стал), другой (не очень хороший) вариант - использовать hg convert для создания нового ртутного репо из f1, назовем его f5, а затем hg pull -f f5 в f3. Поскольку никакие изменения в f5 не были бы предком или потомком какого-либо изменения в f3 - никакой общей линии - у вас получилось бы две головы и два потока наборов изменений. Некоторые люди делают это, но, честно говоря, я не вижу никакой реальной выгоды в этом.

Где бы я ни был, я просто конвертировал бы f1 в f5 (ртутный репо со всей вашей старой историей), а затем держал его для справки.

1 голос
/ 28 марта 2010

Вы пробовали Расширение для пересадки ? Это позволяет вам извлекать изменения, даже если хранилище не связано.

Итак, что вы можете сделать, это взять f1, сделать конвертацию в ваш новый репозиторий, называемый HGSVN. Этот репо будет держать вас всю историю, созданную SVN. Если вы больше не вносили изменений в f1, вы знаете, что f3 содержит все модификации после копии (f2). Теперь вы можете использовать пересадку, чтобы получить все последующие изменения в HGSVN. Да, суммы sha1 изменились бы, но, поскольку HGSVN теперь содержит всю вашу историю разработки, вы можете забыть о других репозиториях.

КСТАТИ. Я рекомендую вам сделать резервный клон, прежде чем делать фактическую пересадку. Таким образом, вы можете просто сделать это снова, если вы ошиблись командами. Надеюсь, что это поможет.

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