svn-all-fast-export:匹配文件名

时间:2014-08-24 03:58:57

标签: git svn version-control

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忽略了文件,因为它无法在文件上递归,我不知道如何编写规则来匹配普通文件。

1 个答案:

答案 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以查看正在发生的事情。