2014-02-21 65 views
1

在我的Linux机器上,我同时使用SVN和Git。如何让git-svn使用特定版本的SVN?

为了让我的生活更轻松,我添加 源/opt/svn/linux64/ix86/svn_1.8.5/interface/startup/svn_1.8.5_64.env 我.bashrc,从而书写 SVN -version 显示1.8如预期的那样。

但是当这个git-svn结帐失败。这发生在Git 1.7.10.1中,并且是已知的不兼容性(see for example here)。

我可以很容易地通过source ing 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

svn_1.8.5_64.env文件中包含了什么内容?这不是Subversion的一部分,因此它必须是您的打包者或系统管理员为您设置的东西。 –

+0

@BenReser我已经添加了这个问题。 –

+0

我在系统上添加了一些关于Perl的细节。 –

回答

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 "[email protected]" 

其中$ SOMEPATHTOPERLLIS被替换为安装中Perl5文件的实际路径。我无法告诉你这在系统之间会有什么变化。如果您搜索名为Ra.pm的文件,您通常可以找到一般区域。你只需要指出你在哪里找到了这个文件的几个级别。

+0

我在问题的机器上添加了关于Perl的一些细节。 –

+0

首先,我尝试了上面的脚本,它不起作用。我尝试了从'/ usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/SVN /'到'/ usr/lib64/perl5 /'的所有路径变体。 –

+0

其次,一旦我们解决了工作本身的问题,如何使其“透明”,以便我可以编写'git'并让脚本被调用而不是实际的Git?但是不要在该脚本中绑定Git路径,而是使用'.bashrc'中的源代码? –

相关问题