SVN迁移Git时git-svn的--ignore-paths正则配置问题
解决git-svn过滤SVN分支指定目录的问题
正确的排除正则表达式
要精准排除project1/branches/development下的archive目录(包括其所有子文件/子目录),使用以下正则:
^project1/branches/development/archive(/.*)?$
- 解析:
^锚定路径开头,确保只匹配SVN仓库根目录下的指定路径,避免误匹配其他位置的archive目录(/.*)?是可选匹配,既排除archive目录本身,也排除其下所有内容
使用方式
1. 首次克隆时直接指定
执行克隆命令时带上--ignore-paths参数:
git svn clone https://svn.host.co.mz/svn/sistemas \ --fetch=project1/branches/development:refs/remotes/svn/development \ --ignore-paths='^project1/branches/development/archive(/.*)?$' \ my-git-repo
(--fetch参数明确指定要拉取的分支,避免拉取整个仓库的其他分支,提升效率)
2. 已有仓库修改配置
如果已经初始化了git-svn仓库,编辑.git/config文件,找到[svn-remote "svn"]段,添加/更新ignore-paths配置:
[svn-remote "svn"] url = https://svn.host.co.mz/svn/sistemas fetch = project1/branches/development:refs/remotes/svn/development ignore-paths = ^project1/branches/development/archive(/.*)?$
修改后执行git svn fetch重新拉取即可生效。
常见失效原因排查
- 正则未锚定路径:如果只写
archive或archive/,会匹配仓库中所有名为archive的目录,而非目标分支下的特定目录 - 未匹配子内容:仅写
^project1/branches/development/archive$只会排除archive目录本身,其下的文件/子目录仍会被拉取 - 引号转义问题:shell环境下需用单引号包裹正则,避免特殊字符被转义;Windows环境可改用双引号,但注意转义反斜杠
内容的提问来源于stack exchange,提问作者Herman Maleiane
相关产品推荐
相关产品推荐

