在我的Linux机器上,我同时使用SVN和Git。
为了让我的生活更轻松,我补充道
源/opt/svn/linux64/ix86/svn_1.8.5/interface/startup/svn_1.8.5_64.env
到我的.bashrc
然后写作
svn -version
按预期显示1.8.5。
但是当结帐时git-svn
失败时。这发生在Git 1.7.10.1中,并且是已知的不兼容性(see for example here)。
我可以通过source
SVN 1.7.9版轻松解决这个问题。但这需要我重新启动SSH连接。然后在执行git-svn
操作后再次重启。 (在这两种情况下都必须编辑.bashrc
!)
我也可以切换到SVN 1.7.9,但这需要我降级我使用的所有SVN工具,包括我在Windows机器上使用的TortoiseSVN(我不时在共享网络驱动器上进行检查时使用) )。
所以有一种“非侵入性”的方式(所以我只能为自己做 - Linux在共享服务器上!)使git-svn
使用1.7.9版本,而命令行仍然使用1.8.5?
/opt/svn/linux64/ix86/svn_1.8.5/interface/startup/svn_1.8.5_64.env
包含以下内容:
add_to_env()
{
old_value=`eval echo '$'${1}`
eval ${1}=`echo ${old_value}|awk '{ n=split($1,parts,":"); printf "%s", toadd ;
for (i = 1; i <= n; ++i) if ( toadd != parts[i] ) printf ":%s", parts[i]; }' toadd=${2}`
}
if [ -n "$SVN_STARTUP" ]; then
SVN_TMP=$SVN_STARTUP
unset SVN_STARTUP
. $SVN_TMP
else
# setum and setmake can overrule SVN_VERSION
if [ -z "$SVN_VERSION" ]; then
export SVN_VERSION=svn_1.8.5
fi
export SVN_HOME=/opt/svn/linux64/ix86/$SVN_VERSION
add_to_env PATH $SVN_HOME/bin
export PATH
add_to_env MANPATH $SVN_HOME/share/man
export MANPATH
add_to_env LD_LIBRARY_PATH $SVN_HOME/lib
export LD_LIBRARY_PATH
fi
关于Perl:
perl --version
显示5.8.8,which perl
显示/usr/bin/perl
不是链接,/usr/bin
也包含perl5.8.8
,其似乎(diff
)相同,find / -name Ra.pm
发现(到目前为止......)/usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/SVN/Ra.pm
。答案 0 :(得分:1)
首先,环境脚本并没有真正完全改变对Subversion的绑定。事实上,它实际上是将绑定与其他版本的库混合在一起。一般来说,这可能会起作用,因为Subversion为保持我们的API兼容做了很多努力,你最终应该使用相同版本的各种Subversion库(这很重要)。
为了正确使用与库一起使用的Subversion Perl绑定,您需要添加Perl绑定所在的路径。 Perl使用PERL5LIB
环境处理此问题。其效果与您的PATH
或LD_LIBRARY_PATH
环境变量类似。其他语言需要类似的东西(但是git-svn只使用Perl,因此在这种情况下并不重要。)
除此之外,您应该能够在shell中获取脚本以更改库,因为它将库添加到值的开头(将按给定的顺序搜索)。因此,您应该能够运行source envfile
或. envfile
。
如果你想要你可以简单地用这样的东西包装git并把它放在你的路径上(你也可以将它别名,但脚本不会看到它)。
#!/bin/bash
. /opt/svn/linux64/ix86/svn_1.7.9/interface/startup/svn_1.7.9_64.env
export PERL5LIB="$SOMEPATHTOPERLLIBS:$PERL5LIB"
git "$@"
$ SOMEPATHTOPERLLIS替换为安装中Perl5文件的实际路径。我无法告诉你它在不同系统之间的差异。如果您搜索名为Ra.pm
的文件,通常可以找到常规区域。你应该只需要指出你发现文件几级的地方。