如何让git-svn使用特定版本的SVN?

时间:2014-02-21 00:34:51

标签: linux git bash svn git-svn

在我的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

1 个答案:

答案 0 :(得分:1)

首先,环境脚本并没有真正完全改变对Subversion的绑定。事实上,它实际上是将绑定与其他版本的库混合在一起。一般来说,这可能会起作用,因为Subversion为保持我们的API兼容做了很多努力,你最终应该使用相同版本的各种Subversion库(这很重要)。

为了正确使用与库一起使用的Subversion Perl绑定,您需要添加Perl绑定所在的路径。 Perl使用PERL5LIB环境处理此问题。其效果与您的PATHLD_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的文件,通常可以找到常规区域。你应该只需要指出你发现文件几级的地方。