2014-01-09 2 views
0

Cygwin을 사용하고 있습니다.어떻게하면 Git이 특정 Svn 클라이언트를 사용하도록 할 수 있습니까?

$ type svn 
svn is /cygdrive/c/Program Files/SlikSvn/bin/svn 

$ echo $PATH | sed 's/:/\n/g' 
/cygdrive/c/Program Files/SlikSvn/bin 
/bin 
/home/me/bin 
/home/me/bin 
/usr/local/bin 
/usr/bin 
/cygdrive/c/Program Files (x86)/Haskell/bin 
/cygdrive/c/Program Files (x86)/Haskell Platform/2012.4.0.0/lib/extralibs/bin 
/cygdrive/c/Program Files (x86)/Haskell Platform/2012.4.0.0/bin 
/cygdrive/c/Windows/system32 
/cygdrive/c/Windows 
/cygdrive/c/Windows/System32/Wbem 
/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0 
/cygdrive/c/Program Files/TortoiseSVN/bin 
/cygdrive/c/Program Files/Java/jdk1.6.0_34/bin 
/cygdrive/c/apache-maven-3.0.4/bin 
/cygdrive/c/apache-ant-1.8.0/bin 
/cygdrive/c/Program Files (x86)/Haskell Platform/2012.4.0.0/mingw/bin 
/cygdrive/c/cygwin/bin 
/cygdrive/c/Program Files (x86)/QuickTime/QTSystem 
/cygdrive/c/Program Files/nodejs 
/cygdrive/c/Program Files (x86)/phantomjs-1.9.1-windows 
/cygdrive/c/Program Files/SlikSvn/bin 


$ git svn dcommit 
Committing to https://svn.corp.corp.com/svn/results/trunk ... 
     R  foo => bar 
assertion "svn_fspath__is_canonical(child_fspath)" failed: file "/usr/src/subversion/subversion-1.8.5-1/src/subversion-1.8.5/subversion/libsvn_subr/dirent_uri.c", line 2504, function: svn_fspath__skip_ancestor 
error: git-svn died of signal 6 

이유 나는 경로가 하나의 첫 번째를 사용하여 생각하지 않는다 : 나는 자식이 경로에 찾은 첫 번째 SVN 클라이언트를 사용하는 것이지만, 그런 경우가 될 것 같지 않습니다 가정 오류는 /usr/src/subversion/subversion-1.8.5-1/src/subversion-1.8.5/subversion/libsvn_subr/dirent_uri.c이고 내 경로의 첫 번째 문자는 /cygdrive/c/Program Files/SlikSvn/bin입니다.

답변

1

git-svn은 명령 행 클라이언트를 사용하지 않고 Subversion API를 직접 사용하기 위해 Perl SWIG 바인딩을 사용합니다.

오류 메시지는 해당 라이브러리를 호출 할 때 어설 션되며 어설 션이 생성되는 곳의 소스 파일과 줄의 경로를 제공합니다. 그래서 그 경로는 사용중인 svn 클라이언트와 아무 관련이 없습니다.

Subversion 자체에 버그가 있거나 경로가 올바르게 caononicalized되지 않았기 때문에 힘내 사용에 버그가있어 어설 션이 발생합니다. 나는 아마도 Git 사람들에게이 문제를보고하기 시작할 것입니다. 그 이유는 정규화 오류가 발생한 곳에 대한 내기가 될 것이기 때문입니다.

+0

나는 그들이 이미 그것에 대해 알고 있다고 생각합니다. 당신은 여기에서 볼 수 있습니다 : http://stackoverflow.com/questions/17693255/git-svn-dcommit-fails-because-of-assertion-error-svn-fspath-is-canonicalchild?rq=1 –

+0

심지어 해답 그것이 실제적으로 질문에 대답하지 않는다는 것을 표시했다. 그리고 문제는 Git이 특정 버전을 사용하도록 강제하는 방법입니다. 리눅스에서 나는'소스'(Bash에서) 작업 할 때 SVN 1.8.5'git-svn' (v 1.7.10.1)이 복제 도중 실패합니다 (알려진 비 호환성 문제). 소스가 SVN 1.7.9인데'git-svn' 복제본이 성공합니다. 그래서'git-svn'이 1.8.5 대신에 1.8.5 대신'SVN 1.7.9 '를 사용하도록'source'ed할까요? –

+1

@ Adam 질문 : 특정 클라이언트를 사용한다고 말할 수 없다는 질문에 대한 대답입니다. 당신이 묻는 것은 관련 있지만 다른 질문입니다. 어떻게하면 git-svn이 다른 버전의 Subversion 바인딩을 사용하도록 할 수 있습니까? 이에 대한 해답은 원하는 Perl 라이브러리/Subversion 바인딩의 버전을 찾을 수 있도록 PERL5LIB 및 PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH를 설정하는 것입니다. 이 질문에 대한 질문을하고 환경에 대한 세부 정보를 제공하려면 좀 더 자세히 대답 할 수 있습니다. –