2012-07-17 15 views
9

Quiero usar git para clonar un repositorio svn, pero desafortunadamente, cuando svn checkout obtiene el repositorio con todos los elementos externos, git svn clone solo obtiene el repositorio sin externos. ¿Cómo puedo obtener los elementos externos del repositorio svn a través del git svn? No quiero hacer ninguna cosa elegante, solo obtener el repositorio completo con elementos externos.git svn - clon repo con todos los externos

+0

hay https://github.com/andrep/git-svn-clone-externals – unhammer

Respuesta

8

git-svn no es compatible con externos, pero puede probar SmartGit en lugar de git-svn. Admite svn: externals, convirtiéndolos en .gitsvnextmodules y visualizándolos como módulos. La única restricción: debe clonar el repositorio con SmartGit en lugar de abrir el repositorio git-svn existente.

+1

¿Hay herramientas de línea de comandos ¿Podría usar? – wowpatrick

+0

desafortunadamente no hay línea de comando, solo interfaz de usuario –

+0

La siguiente pregunta: [¿SmartGit admite git-svn?] (Http://stackoverflow.com/q/16128118/86967) – nobar

2

He estado usando git como interfaz para acceder a un repositorio SVN. La estructura en SVN generalmente es bastante simple, de modo que hay un directorio de nivel superior que tiene los elementos externos en él y no externos en los subdirectorios. También lo externo realmente no cambian mucho, una vez que se añaden en Así que asumiendo algo como:.

git svn clone X 
cd X 

he tenido éxito conseguir todas las cosas externas con el siguiente comando:

git svn show-externals | \ 
perl -ne 'if (/^\/(.*) (.*)/) { print "git svn clone $1 $2\n"; }' | \ 
bash 

supongo que una una estructura más complicada para los externos requeriría un script de Perl más complicado. Además, si cambian sus efectos externos, tendrá que hacer algo similar nuevamente.

+0

Encontré la técnica anterior muy útil, excepto que tuve que invertir $ 2 y $ 1 (el directorio local y el control remoto) – tutuDajuju

+0

@tutuDajuju me alegro de haberlo ayudado. Gracias por comentar También lo he notado, pero no he dedicado tiempo a investigar por qué el orden cambia en algunos casos. –

+0

¿Quizás la sintaxis del clon cambió entre versiones? Hoy es clone $ url [$ dir_destino] (dir es opcional) – tutuDajuju

1

que no puedo comentar, así que aquí publicar solución que funciona en mi caso

git svn show-externals | \ 
    awk '/^\// { print "git svn clone "$3" ."$1" "$2":HEAD" }' | \ 
    bash