我在 Windows 上运行 svn2git,并希望从迁移过程中排除一些分支。这是如何实现的?
2 回答
svn2git 从它提供给它的 --ignore-paths 参数的排除标签生成一个正则表达式。
不幸的是,这个正则表达式包含 DOS 保留字符——比如 [ ] | 等 - 没有逃脱。
我首先尝试使用生成的正则表达式来制作一个正确转义的正则表达式来制作我自己的 --ignore-paths 参数,但是 DOS 的保留字符/转义系统是一场真正的噩梦。
解决方案 -> 在您的 Windows 系统上使用 Linux 发行版或设置 cygwin:
安装 cygwin,带有 ruby 包
宝石安装 svn2git
cd /usr/local/bin
ln -s /home/<用户>/.gem/ruby/gems/svn2git-2.3.2/bin/svn2git
cd /cygdrive/c/<你的目标仓库>
现在您可以根据需要使用尽可能多的 --exclude 参数运行 svn2git !
正如cdup建议的那样,如果您可以让它在 Git for Windows 附带的 Git bash 窗口中运行,您可能会避免许多问题。
但是,如果您愿意,可以直接在您的机器上修改 svn2git 源代码来解决此问题。出现此问题是因为 svn2git 使用单'
引号而不是双引号"
将传递给git svn
. 下面描述的修复也适用于Windows 命令提示符上下文中的 svn2git 的其他区域。
无论如何,migration.rb
在下面打开<ruby install path>\lib\ruby\gems\<version>\gems\svn2git-<version>\lib\svn2git
并寻找这一行:
cmd += "--ignore-paths='#{regex}' "
用这个替换它(注意'
已被转义的双引号替换\"
):
cmd += "--ignore-paths=\"#{regex}\" "
保存更改并重新运行 svn2git。您的排除模式现在应该可以工作了。