Linux 如何使git svn使用特定版本的svn?

Linux 如何使git svn使用特定版本的svn?,linux,git,bash,svn,git-svn,Linux,Git,Bash,Svn,Git Svn,在我的Linux机器上,我同时使用SVN和Git 为了让我的生活更轻松,我补充道 source/opt/svn/linux64/ix86/svn_1.8.5/interface/startup/svn_1.8.5_64.env 到我的.bashrc,然后写 svn–版本 如预期显示1.8.5 但是当拥有这个git时,svn在签出时失败。这发生在Git 1.7.10.1中,是一种已知的不兼容性() 我可以通过sourceing SVN 1.7.9版轻松解决这个问题。但这需要我重新启动SSH连接。然

在我的Linux机器上,我同时使用SVN和Git

为了让我的生活更轻松,我补充道 source/opt/svn/linux64/ix86/svn_1.8.5/interface/startup/svn_1.8.5_64.env 到我的
.bashrc
,然后写 svn–版本 如预期显示1.8.5

但是当拥有这个
git时,svn
在签出时失败。这发生在Git 1.7.10.1中,是一种已知的不兼容性()

我可以通过
source
ing SVN 1.7.9版轻松解决这个问题。但这需要我重新启动SSH连接。然后在执行
git svn
操作后重新启动。(在这两种情况下都必须编辑
.bashrc

我也可以切换到SVN 1.7.9,但这将要求我降级所有我使用的SVN工具,包括我在Windows机器上使用的TurtoiseSVN(以及我在共享网络驱动器上进行签出时不时使用的工具)

那么,有没有一种“非侵入式”的方法(这样我就只能自己做了——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
add_to_env()
{
旧值=`eval echo'$'${1}`
eval${1}=`echo${old_value}awk'{n=split($1,parts,“:”);printf“%s”,toadd;

对于(i=1;i首先,环境脚本并没有真正将您的绑定完全更改为Subversion。事实上,它实际上是将绑定与其他版本的库混合在一起。一般来说,这可能是可行的,因为Subversion花了大量精力来保持我们的API兼容,您应该最终使用相同版本的various Subversion库(这很重要)

为了正确使用随库提供的Subversion Perl绑定,您需要添加Perl绑定所在的路径。Perl使用
PERL5LIB
环境处理此问题。这与
path
LD\u LIBRARY\u path
环境变量的工作方式类似。其他语言需要similar东西(但git svn只使用Perl,所以在本例中这并不重要)

除此之外,您应该能够在shell中生成脚本来更改库,因为它将库添加到值的开头(将按给定的顺序进行搜索)。因此,您应该能够运行
源envfile
.envfile

如果您愿意,您可以简单地用类似这样的东西包装git并将其放在您的路径上(您也可以将其别名,但脚本不会看到它)


其中$SOMEPATHTOPERLLIS被替换为您安装中Perl5文件的实际路径。我无法告诉您这在不同的系统中有所不同。如果您搜索名为
Ra.pm
的文件,通常可以找到一般区域。您只需将其指向您在几层上找到该文件的位置。

什么它在svn_1.8.5_64.env文件中?这不是Subversion的一部分,因此它必须是您的打包程序或系统管理员为您设置的。@BenReser我已将其添加到问题中。我已在系统中添加了一些有关Perl的详细信息。我已在问题中的计算机上添加了一些有关Perl的详细信息。首先,我尝试了上述方法我尝试了从
/usr/lib64/perl5/vendor\u perl/5.8.8/x86\u 64-linux-thread-multi/SVN/
/usr/lib64/perl5/
的所有路径变体。其次,一旦我们解决了工作本身的问题,如何使其“透明”这样我就可以编写
git
,并调用脚本而不是实际的git?,但不必在脚本中绑定git路径,而是使用
.bashrc
中的源代码?
#!/bin/bash

. /opt/svn/linux64/ix86/svn_1.7.9/interface/startup/svn_1.7.9_64.env
export PERL5LIB="$SOMEPATHTOPERLLIBS:$PERL5LIB"

git "$@"