Перенос репозитория svn без транка в git с помощью reposurgeon

Я пытаюсь преобразовать старый репозиторий svn в git. Прочитав пару сообщений, описывающих недостатки использования git-svn для этой задачи, особенно для репозиториев с нестандартной компоновкой, я решил попробовать репохирург. После первоначального использования версии из исходных кодов пакета Ubuntu (4.3) я на всякий случай переключился на самую последнюю версию (4.14; собран из исходных кодов).

К сожалению, мне пока не удалось создать ничего, кроме пустого репозитория git. Кажется, я не смог понять, как правильно пользоваться репохирургом.

Вот основная структура репозитория svn, который я пытаюсь преобразовать:

  • ветви
    • 1.0.x
    • 1.1.x
  • теги
    • развитие
      • 1.0.0
      • 1.0.1
      • 1.0.2
      • 1.1.0
    • производство
      • 1.0.0
      • 1.0.1

Внутри репозитория есть еще кое-что, но в этом суть. Здесь важно отметить

  1. Нет багажника
  2. Структура тега не плоская

Сейчас я пытаюсь выполнить минимальное количество шагов. Я использую http://www.catb.org/~esr/reposurgeon/repository-editing.html в качестве ориентира, поэтому после создания карты авторов для репозитория я сделал следующее:

repotool mirror URL project-mirror
reposurgeon
  read project-mirror
  authors read <project-mirror.map
  prefer git
  rebuild project-git

Когда я бегу read project-mirror внутри reposurgeon (project-mirror - это каталог зеркала, которое я создал с помощью repotool), я получаю следующий результат:

reposurgeon: nonexistent source "test" on pathmap copy
reposurgeon: component "test" to be deleted is missing
reposurgeon: 1898910: missing required date field
* project-mirror
reposurgeon: 2 new log message(s)

Сначала создайте дамп SVN (либо используя repotool export или svnadmin dump на моем локальном зеркале) и чтение, которое вместо этого приводит к тому же результату.

Бег rebuild project-git дает следующий результат:

reposurgeon: not trying to checkout an empty repository
reposurgeon: rebuild is complete.
reposurgeon: preserved files restored.

Это создает пустой репозиторий git: без коммитов, без веток, без тегов. Я не ожидаю, что цепочка команд, которую я опубликовал выше, приведет именно к тому результату, который я хочу (в конце концов, в документации даже упоминается, что получение этого является итеративным процессом), но я ожидал хотя бы несколько коммитов / или ветки внутри репозитория git.

Приветствуются любые указатели в правильном направлении.

PS: Также может быть важно отметить, что сервер SVN можно и нельзя изменять каким-либо образом во время этого процесса. У меня есть доступ только для чтения к рассматриваемому репозиторию. У меня нет административного доступа к этому серверу SVN.

0 ответов

Преобразование вашего репозитория не должно представлять проблемы. Вот что стоит проверить:

  1. Укажите тип источника; использовать sourcetype svn для этого.
  2. Укажите структуру вложенных тегов с помощью branchify branches/* tags/development/* tags/production/*

Вы также можете сгладить имена тегов, например, с помощью

branchmap :tags/development/(.+):tags/dev_\1: \
          :tags/production/(.+):tags/prod_\1:
Другие вопросы по тегам