svn-all-fast-export: сопоставить имена файлов

Правила совпадения для svn-all-fast-export должны заканчиваться завершающим символом /, за исключением правил повторения. У меня есть svn-репозиторий, который должен работать в ветке и делать разные вещи с каталогами и файлами в ветке. Подкаталоги должны быть помещены в одну ветку git, а файлы непосредственно под веткой svn должны быть помещены в другую ветку git. Например, в SVN:

/branches/20/subdir1
/branches/20/subdir2
/branches/20/file1
/branches/20/file2

subir1 и subdir2 должны идти в ветку A в git, а file1 и file2 должны идти в ветку B в git.

Из-за способа, которым svn экспортирует свою дату, только /branch /20 упоминается как измененная для коммита, который его создал, поэтому я должен иметь svn-all-fast-export match /branch /20 и повторить просмотр файлов и подкаталогов.

Поскольку svn-all-fast-export требует конечной косой черты в шаблоне сопоставления, как я могу сопоставить имена файлов в этой ситуации? Я могу точно сопоставить подкаталоги, но в настоящее время svn-all-fast-export игнорирует файлы, потому что он не может рекурсировать файл, и я не знаю, как написать правило, соответствующее обычному файлу.

1 ответ

Решение

При работе над преобразованием сложного многопроектного репозитория subversion в git мне также нужно было сопоставлять файлы (переместить некоторые типы файлов в другой репозиторий). Изучив исходный код svn2git (svn-all-fast-export), я пришел к выводу, что шаблон сопоставления на самом деле не требует конечной косой черты - конечная косая черта заставляет шаблон сопоставлять только каталоги. Я закончил со следующим правилом:

    # binary blobs
    match /(.*\.)(zip|tar\.gz|tgz|tar\.bz|tbz|jar|deb)$
      repository blobs.git
      branch master
      prefix \1\2
    end match

и это работает просто отлично. Поэтому я бы попробовал следующее в вашем случае:

    # folders
    match /branches/([^/]+)/([^/]+)/
      repository repo.git
      branch \1-A
      prefix \2
    end match

    # files
    match /branches/([^/]+)/([^/]+)$
      repository repo.git
      branch \1-B
      prefix \2
    end match

    # recurse
    match /branches/([^/]+)
      action recurse
    end match

Запустите svn-all-fast-export с --debug-rules чтобы увидеть, что происходит.

Другие вопросы по тегам