RHEL7.3下git svn操作报Bad URL passed to RA layer错误求助
我之前碰到过一模一样的问题,大概率是SVN的Perl绑定没正确加载HTTP相关的RA(仓库访问)驱动,或者Git和SVN的集成组件版本不匹配导致的。给你几个一步步排查和解决的方法:
首先先确认基础问题:先直接用SVN命令测试你的仓库URL是否能正常访问,在终端执行:
svn info http://<IP>:<PORT>/svn/trunk/Automation/UCM
如果这个命令也报错,那问题出在SVN本身的配置或者网络连接上——先检查SVN服务器是否可达、端口是否开放、URL有没有拼写错误(比如末尾斜杠、路径大小写)。如果SVN命令能正常返回仓库信息,那问题就聚焦在Git和SVN的Perl绑定集成上。
接下来按以下步骤排查:
1. 验证SVN Perl绑定的完整性
Git SVN完全依赖SVN的Perl模块,特别是RA层的驱动。你用cpan装了SVN::Core,但可能缺少HTTP相关的RA插件。执行下面的命令检查Perl能否加载SVN的HTTP RA驱动:
perl -e 'use SVN::Ra; my $ra = SVN::Ra->new(url => "http://<IP>:<PORT>/svn/trunk"); print "Success!\n";'
如果这个命令报错,说明你的SVN Perl绑定没有包含HTTP RA支持。这种情况下不建议用cpan的Alien::SVN安装,而是用源码编译SVN并启用Perl绑定:
- 先卸载之前通过cpan装的SVN相关模块:
cpan -U Alien::SVN SVN::Core - 下载SVN 1.9.7的源码,编译时加上
--enable-perl-binding参数,确保编译时包含所有RA驱动(包括http/https):
./configure --prefix=/usr/local/subversion --enable-perl-binding make && make install
编译完成后,确认Perl能找到新的SVN模块,可以设置PERL5LIB环境变量:
export PERL5LIB=/usr/local/subversion/lib/perl5/site_perl/5.18.2/x86_64-linux-thread-multi:$PERL5LIB
2. 重新编译Git并指定SVN路径
如果你的Git是通过yum或二进制包安装的,可能它链接的SVN版本和你现在装的1.9.7不匹配。建议重新编译Git,编译时指定SVN的安装路径,确保Git能正确调用新的SVN Perl绑定:
- 下载Git 2.9.5源码,编译时加上
--with-svn=/usr/local/subversion参数:
./configure --prefix=/usr/local/git --with-svn=/usr/local/subversion make && make install
编译完成后,重启终端,用git --version确认使用的是新编译的Git版本。
3. 检查系统库依赖
有时候动态库路径不对也会导致RA驱动加载失败。执行下面的命令检查SVN相关库的路径:
ldd /usr/local/subversion/lib/perl5/site_perl/5.18.2/x86_64-linux-thread-multi/SVN/_Core.so
如果有找不到的库,把SVN的lib路径加到LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/usr/local/subversion/lib:$LD_LIBRARY_PATH
可以把这行加到~/.bashrc或者/etc/profile里,让设置永久生效。
4. 测试Git SVN
完成上面的步骤后,重新执行git svn fetch,应该就能正常工作了。如果还是报错,检查Git的SVN模块路径是否正确:
perl -M Git::SVN -e 'print $INC{"Git/SVN.pm"}, "\n";'
确保这个路径是你新编译的Git里的,而不是旧版本的。
内容的提问来源于stack exchange,提问作者Iowa

