svn-all-fast-export的匹配规则必须以尾随/结尾,但递归规则除外。我有一个svn存储库,需要在分支上递归,并对分支下的目录和文件执行不同的操作。子目录应放在一个git分支中,直接在svn分支下的文件应放在不同的git分支中。例如,在svn:
中/branches/20/subdir1
/branches/20/subdir2
/branches/20/file1
/branches/20/file2
subir1和subdir2应该转到git中的分支A,而file1和file2应该转到git中的分支B.
由于svn导出日期的方式,只有/ branches / 20被提及为创建它的提交更改所以我必须有svn-all-fast-export match / branches / 20并递归查看文件和子目录。
因为svn-all-fast-export需要在匹配模式上使用尾部斜杠,所以如何在这种情况下匹配文件名?我可以很好地匹配子目录,但目前svn-all-fast-export忽略了文件,因为它无法在文件上递归,我不知道如何编写规则来匹配普通文件。
答案 0 :(得分:4)
在将复杂的多项目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
使用--debug-rules
运行svn-all-fast-export以查看正在发生的事情。