You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KDE svn2git多文件夹匹配规则正确性及Git目录创建问询

SVN转Git:svn2git规则验证与疑问解答

我的SVN目录结构

  • Project A
    • Folder 1
      • Folder a
      • Folder b
        • Folder 1
          • trunk
          • tags
        • ...
        • Folder n
          • trunk
          • tags
    • Folder 2
    • Folder 3
  • Project B

我编写的KDE svn2git匹配规则

create repository repo
end repository
match Project A/Folder 1/Folder b/([^/]+)/trunk/([^/]+)/
repository repo/Project A/Folder b/([^/]+)
branch master
end match
# Add a prefix to all tag branches so we can fix them later.
match Project A/Folder 1/Folder b/([^/]+)/tags/([^/]+)/
repository repo/Project A/Folder b/([^/]+)
branch tag--\1
end match
# Ignore all other directories.
match /
end match

我的疑问

  1. 请问上述svn2git匹配规则是否正确?
  2. 是否需要提前在Git仓库中创建所有文件夹,还是svn2git会自动创建?

解答

一、关于svn2git匹配规则的正确性

咱们先明确你的规则目标:把Project A/Folder 1/Folder b下的每个子文件夹(比如Folder 1到Folder n)里的trunk和tags,分别映射到Git仓库repo/Project A/Folder b/对应子文件夹的master分支和带前缀的tag分支,同时忽略其他目录。这个思路是对的,但规则里有几个细节需要调整:

  1. trunk的匹配范围问题:你写的match Project A/Folder 1/Folder b/([^/]+)/trunk/([^/]+)/会要求trunk下面必须有至少一层子目录才能匹配,如果trunk本身就是存放文件的根目录(比如trunk/直接有文件),这个规则就会漏掉。建议改成match Project A/Folder 1/Folder b/([^/]+)/trunk(/.*)?$,这样不管trunk下有没有子目录,都能被正确匹配到。

  2. tag分支的变量引用错误:在tag规则里,你用了branch tag--\1,但这里的\1对应的是第一个捕获组(也就是Folder 1、Folder n这类子文件夹的名称),而你实际想要捕获的是tags下面的具体标签名(第二个捕获组([^/]+)),所以应该改成branch tag--\2,不然所有标签都会被命名为tag--Folder1,而不是你想要的tag--实际标签名。

  3. repository路径的简化:你写的repository repo/Project A/Folder b/([^/]+)可以简化成repository repo/Project A/Folder b/\1,用捕获组引用代替重复的正则,更简洁也不容易出错。

修正后的规则参考:

create repository repo
end repository
match Project A/Folder 1/Folder b/([^/]+)/trunk(/.*)?$
repository repo/Project A/Folder b/\1
branch master
end match
# Add a prefix to all tag branches so we can fix them later.
match Project A/Folder 1/Folder b/([^/]+)/tags/([^/]+)(/.*)?$
repository repo/Project A/Folder b/\1
branch tag--\2
end match
# Ignore all other directories.
match /
end match

二、关于Git文件夹是否需要提前创建

完全不需要手动提前创建!svn2git在转换过程中,会自动根据SVN里的文件和目录结构,在Git仓库中生成对应的目录结构。Git本身是基于文件系统快照的版本控制系统,当转换时遇到SVN中的子目录,它会自动在Git仓库中创建对应的文件夹来存放内容,你只需要确保配置规则正确,剩下的目录创建工作交给svn2git就好。

内容的提问来源于stack exchange,提问作者Idris.AH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:08