Миграция svn2git: Правила

Поэтому я решил использовать инструмент svn2git после твердой рекомендации. Чтобы перенести репозиторий, мне нужен файл авторов и файл правил, а также сам репозиторий. Я составил все эти три и поместил их в каталог, который я пока называю myRepository_test. Я ожидаю, что мой новый репозиторий git будет здесь после миграции.

Вот структура репозитория, которая у меня сейчас есть:

- myRepository
  -- myRepository.release
  -- myRepository.mapping
  -- myRepository.base
  -- ..

Всего у меня здесь около 30 проектов.

Настоящим я делюсь своими файлами, которые будут использоваться:

авторmap.txt:

egent = Emma Gent <[email protected]>
gstar = Gabriel Star <[email protected]>
.
.

Пока что хотел попробовать только для 2-х проектов, так что:

myRepository.rules:

create repository myRepository
end repository

# main history

match /trunk/myRepository/myRepository.release/
  repository myRepository
  branch master
end match

match /trunk/myRepository/myRepository.mapping/
  repository myRepository
  branch master
end match

# Ignore everything else
match /
end match

что делает последнюю команду:

./svn-all-fast-export --identity-map authormap.txt --rules myRepository.rules --add-metadata http://address/svn/myRepository

который заканчивается как:

Loading rules from: "myRepository.rules" 
Loading rules from "myRepository.rules" 
Could not read the rules file: myRepository.rules
Aborted (core dumped)

Я не очень уверен в содержании файла правил, было бы неплохо, если бы кто-нибудь помог мне в этом.

Заранее спасибо.


person Community    schedule 09.05.2016    source источник


Ответы (1)


Сообщение, которое вы получаете, не означает, что синтаксис является поддельным, синтаксис выглядит нормально. На самом деле он не может найти или прочитать сам файл. Вы вызываете svn-all-fast-export из того каталога, где лежит ваш файл myRepository.rules. А у вас есть права на чтение файла как у пользователя, которым вы называете svn-all-fast-export?

Что касается содержимого файла правил, я не думаю, что оно уже полностью правильно. Вы сохраняете содержимое myRepository.release и myRepository.mapping в корень вашего репозитория. Если это было то, что вы имели в виду, то все в порядке. Если нет, вам, вероятно, следует использовать правило prefix внутри блока match, чтобы содержимое добавлялось в отдельные подкаталоги. Но вы увидите это после того, как вам все равно удастся успешно запустить инструмент.

И еще одно замечание: выражения match являются регулярными выражениями, поэтому вы можете избежать . и получить match /trunk/myRepository/myRepository\.release/. Или, если вы действительно хотите содержимое в той же папке, даже

match /trunk/myRepository/myRepository\.(release|mapping)/
  repository myRepository
  branch master
end match

или если вы хотите подкаталоги

match /trunk/myRepository/myRepository\.(release|mapping)/
  repository myRepository
  branch master
  prefix \1
end match

or

match /trunk/myRepository/(myRepository\.(release|mapping))/
  repository myRepository
  branch master
  prefix \1
end match
person Vampire    schedule 09.05.2016
comment
Ах да, эти папки (отображение, выпуск и т. д.) должны быть отдельными подкаталогами в репозитории, спасибо за уловку. Хорошо, добавляю prefix \1. Замечание, принятое в отношении ., сделано. Наконец, я запускаю скрипт из того же каталога, где находятся мои правила и авторские файлы. Должен ли я запускать из папки svn2git, где изначально находится скрипт (так как он там установлен)? - person ; 09.05.2016
comment
Я не совсем понял ваши последние два предложения. Но вам нужно запустить svn2git оттуда, где вы хотите, чтобы ваш результирующий репозиторий Git находился. Для каждого репозитория, который вы настроили в файле правил, у вас будет вероятный именованный подкаталог с созданным репозиторием Git. Аргументы --rules и --identity-map являются относительными путями к тем файлам, из которых вы выполняете программу. Поэтому, если вы выполняете его из каталога, в котором находятся файлы, у вас либо опечатка в имени файла, либо у вас нет прав на чтение файла. - person Vampire; 09.05.2016
comment
Я так и сделал, на этот раз выдало другую ошибку. Creating new repository "myRepository" svn: Can't open file 'http://address/svn/myRepository/format': No such file or directory Failed to open repository почему он вообще ищет этот /format? - person ; 09.05.2016
comment
Вы не должны использовать адрес удаленного репозитория SVN, скопируйте репозиторий локально и используйте эту локальную копию. - person Vampire; 09.05.2016
comment
Кстати. почему он выглядит так, вероятно, потому, что он является частью репозитория SVN, и там указана версия формата репозитория, поскольку макет репозитория изменяется по версиям SVN. - person Vampire; 09.05.2016
comment
Я клонировал проекты отображения и выпуска в отдельную папку и назвал ее svn-myRepository. Затем я сослался на этот каталог в команду, но все та же ошибка /format - person ; 09.05.2016
comment
Пожалуйста, укажите клон. Если вы сделали svn checkout, это неправильно. Вам нужна не касса, а репозиторий. Либо rsync репозиторий, либо используйте что-то вроде rsvndump, если у вас нет доступа к серверу SVN через SSH. Преобразование будет выполняться быстрее позже, и вам не нужно получать данные через удаленный протокол при каждом запуске. - person Vampire; 09.05.2016
comment
Я сделал не checkout, а другую команду, которая, видимо, тоже не сработала. Я попробовал rsvndump, но выдает ошибку (не буду писать здесь, так как она слишком длинная), сейчас пытаюсь найти документацию по rsync - person ; 10.05.2016