Как я могу экспортировать большой репозиторий Perforce в другую систему контроля версий без потери истории?

В работе у нас есть большой репозиторий Perforce (около 40 тыс. Списков изменений, общий размер хранилища ~ 145 ГБ).В целом мы довольны Perforce с некоторыми незначительными нареканиями, но мы планируем перейти к более распределенной модели разработки и, как следствие, также хотели бы перейти к более распределенной системе контроля версий.

До сих пор я смотрел на обычных подозреваемых (git, mercurial и потенциально bazaar, поскольку у меня есть хороший опыт работы с ним), но наша основная проблема в настоящее время состоит в том, чтобы получить историю версий из Perforce и импортировать в различные DVCS, чтобы мы не теряем историю. Мы также предпочли бы, чтобы сервер Perforce не зависал, если нам совершенно не нужно его хранить - мой опыт с такого рода миграцией показывает, что через некоторое время никто не смотрит на старое репо, поэтому вы потеряете историю туда.

Поскольку в репозитории есть несколько проектов, идея состоит в том, чтобы разделить его на несколько проектов DVCS, когда мы экспортируем историю, поскольку не всем нужно иметь возможность видеть каждую часть истории. Однако наш самый большой проект по-прежнему содержит около 2/3 внесенных изменений и также занимает около 2/3 хранилища. У него также самое большое количество веток - вероятно, около 30.

До сих пор я пробовал следующее - все работает на Windows, поскольку мы работаем только с Windows:

  • Импорт в Mercurial с помощью ] hg convert расширение. Похоже, что это очень хорошо работает для основной ветки проекта, который я конвертирую, но попытка преобразовать ветки Perforce в именованные ветки Mercurial с использованием карты ветвлений по-прежнему приводит к плоскому импорту с каждой проверкой в ​​ветке по умолчанию.Возможно, это потому, что я неправильно настроил карту ветвей, но hg help convert предполагает, что вы можете превратить репозиторий Perforce в «плоскую» структуру без ветвей с помощью этого импортера, что на самом деле недостаточно. для нашего использования.
  • Импортируйте в Git с помощью git-p4.py. Документы Perforce, использующие git в качестве распределенного внешнего интерфейса для Perforce и основанные на закрытии последней ревизии (версий) репозитория, действительно создают пригодный для использования репозиторий git. Попытка импортировать весь подпроект с ветвями ломает импортер, поскольку ему не хватает памяти, поэтому я даже не могу сказать, удается ли ему правильно импортировать наше репо.
  • Затем у меня был блестящий ум, импортировавший репозиторий Perforce в SVN со всеми ветвями, сопоставленными с соответствующими ветвями SVN, поскольку каждая система управления версиями под солнцем может импортировать из SVN. Это будет использовать SVN только в качестве промежуточного шага в преобразовании, а не в качестве целевой VCS - иначе мы бы ничего не выиграли от этого преобразования. Использование p42svn.pl сломалось довольно рано в процессе, так как наш сервер Perforce, похоже, не любил, когда его забивает скрипт, который, кажется, устанавливает новое соединение для каждого файла / ревизии.
  • Я еще не рассматривал возможность экспорта истории в Bazaar, так как это тоже что-то вроде того.

Итак, у меня следующие вопросы:

  • Есть ли хороший инструмент, помимо p42svn.pl, для экспорта репозитория Perforce в SVN? Я не против использования SVN в качестве промежуточного репо, поскольку он, кажется, делает экспорт во все рассматриваемые нами DVCS достаточно простым.
  • Кто-нибудь успешно экспортировал ветки из Perforce в именованные ветки Mercurial, и если да, то как вы это сделали? Документы по расширению convert кажутся немного скудными, и я, похоже, не могу найти хороший / рабочий способ сделать это.
7
задан Timo Geusch 28 February 2012 в 17:04
поделиться