2014-02-21 5 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 и, таким образом, написание СВН -версия показывает 1.8 .5 как и ожидалось.

Но при наличии этого git-svn не удалось проверить. Это происходит в Git 1.7.10.1 и является уже известной несовместимостью (see for example here).

Я могу легко обойти его source IN SVN версия 1.7.9. Но для этого требуется перезапустить соединение SSH. А затем после выполнения перезапуска операции git-svn. (В обоих случаях .bashrc должен быть отредактирован!)

Я мог бы просто переключиться на SVN 1.7.9, но это потребует от меня понизить все инструменты SVN, которые я использую, включая TortoiseSVN, которые у меня есть на моей машине с Windows (и которые я время от времени использовать при проверках на общих сетевых дисках).

Так что есть «неинтрузивный» способ (так что я могу сделать это только для себя - 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 (что важно).

Чтобы правильно использовать привязки Perl Perversion, которые идут с библиотеками, вам нужно добавить путь к тому, где находятся привязки Perl. Perl обрабатывает это с помощью среды PERL5LIB. Что работает аналогично переменным среды PATH или LD_LIBRARY_PATH. Другие языки нуждаются в подобных вещах (но git-svn использует Perl, поэтому в этом случае это не важно).

Кроме того, вы должны просто указать исходный сценарий в своей оболочке, чтобы изменить библиотеки, поскольку он добавляет библиотеки в начало значений (которые будут найдены в указанном порядке). Таким образом, вы должны просто иметь возможность запускать 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'? –

Смежные вопросы