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
чтобы увидеть, что происходит.