2014-02-21 3 views
1

제 리눅스 컴퓨터에서 SVN과 Git을 둘 다 사용합니다. git-svn을 SVN의 특정 버전을 사용하는 방법?

쉽게 내 인생을 만들려면 1.8을 보여줍니다 -version SVN 내 .bashrc에 때문에 쓰고 /opt/svn/linux64/ix86/svn_1.8.5/interface/startup/svn_1.8.5_64.env 소스를 추가 .5 예상대로.

그러나 체크 아웃시이 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로 전환 할 수 있지만 내 Windows 컴퓨터에있는 TortoiseSVN을 포함하여 사용하는 모든 SVN 도구를 다운 그레이드해야합니다. 공유 네트워크 드라이브에서 체크 아웃 할 때 수시 사용).

git-svn이 1.7.9 버전을 사용하도록 명령 줄이 1.8을 사용하는 동안 "비 침입"방식이 있습니다. (그래서 나는 혼자만 할 수 있습니다 - 리눅스 서버는 공유 서버입니다!) 5?

  • which perl는 01,233,349,327,538,859,126,562 링크 아니다 /usr/bin/perl를 도시

    • perl --version는 5.8.8을 보여준다 펄로서

      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 
      

      :


      /opt/svn/linux64/ix86/svn_1.8.5/interface/startup/svn_1.8.5_64.env 다음 포함은 동일한 것으로 보이는 (diff에 의해) perl5.8.8을 포함하고,

    • 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 환경에서이를 처리합니다. 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 '에서 소스를 사용했습니다. –