Reanudando el clon de git-svn

117

Comencé a clonar un repositorio SVN usando la operación de clonación de git-svn. Después de aproximadamente 6 horas de importación (es un gran repositorio), mi computadora se fue a dormir. ¿Existe alguna forma de reanudar la operación sin rehacer todo el trabajo inicial?

Brandon Yarbrough
fuente

Respuestas:

156

El git svn fetchcomando para reanudar a git svn cloneestá confirmado por varias fuentes:

(Por cierto, si durante el paso de clonación inicial su conexión muere o necesita detenerla, para reanudar la clonación, solo tiene que ejecutar el comando anterior para reanudar la descarga del historial).

Parece haber una pérdida de memoria git-svn. El tamaño del git-svnproceso creció lentamente y después de unas dos semanas tenía un tamaño residente de 1,2 GB, momento en el que el sistema operativo se negó a permitir que se bifurcara.
La cosa es que esto fue una bendición disfrazada.
Pude reanudar el clon interrumpido con un simple " git svn fetch", y funcionó mucho más rápido con el montón ahora radicalmente más pequeño.
Esto funcionó tan bien, de hecho, que me acostumbré a interrumpir y reiniciar el proceso todas las tardes y todas las mañanas. Unos días más tarde se hizo.

Comienzas tus aventuras git-svnclonando un repositorio de Subversion existente:

git svn clone url://path/to/repo -s

La -sbandera asume que su repositorio usa la convención "troncal, ramas, etiquetas". De lo contrario, debe especificar manualmente qué directorios representan ramas y etiquetas, si desea que Git los conozca.

Esto llevará mucho tiempo, ya que obtendrá todas las revisiones de SVN y las confirmará localmente. Si por alguna razón se detiene, puede continuar con git svn fetch.

VonC
fuente
1
Creo que algunas de las opciones de línea de comandos proporcionadas git svn clonetambién deben proporcionarse (según corresponda) a git svn fetch. Por ejemplo, había configurado -r HEADpara git svn cloneobtener solo la revisión HEAD SVN. Para reanudar corrí git svn fetch, que comenzó a importar todas las revisiones.
amolbk
Esto comenzó todo desde la primera revisión ... ¡Tengo 10,000 confirmaciones! ¿Alguna idea sobre cómo reanudar desde donde lo dejó?
Nathan JB
@ NathanJ.Brauer no está en la parte superior de mi cabeza. Puede hacer una nueva pregunta (con el sistema operativo, la versión de git y la versión de svn utilizados, y un enlace a esta respuesta para el contexto)
VonC
1
Accidentalmente corté mi conexión de red durante git svn clone, interrumpiendo el proceso. Correr de git svn clonenuevo pareció reanudar el clon en curso. ¿Alguien más hizo esto?
Kehlan Krumme
1
@Kehlan Aparentemente, si considera la respuesta de zan-xhipe a continuación
VonC
17

Encontré una publicación de blog que proporcionó lo que (espero) sea una respuesta correcta.

Aparentemente, la ejecución git svn fetchcompleta efectivamente la operación de clonación. ¡Aquí está la esperanza!

Brandon Yarbrough
fuente
7
tendrá que usar git svn rebasedespués de la recuperación para completar la operación y hacer que la rama maestra refleje el tronco
Romuald Brunet
¿Podría proporcionar un enlace a la publicación del blog para referencia futura?
jmanning2k
6

Como VonC, CaptainAwesomePants y Archi dijeron que git svn fetchhace el truco. Estaba haciendo un git svn clone url... --authors-file=path/to/filey el clon falló porque uno de los autores no estaba en el archivo de autores. Agregué el autor al archivo y lo ejecuté git svn fetchy continuó desde donde lo dejó y mirando el registro de git más tarde, parece que usó el autor recién agregado para reemplazar el nombre del autor de confirmación, por lo que todo fue genial.

Tom Saleeba
fuente
5

Desde al menos git 2.1.0 puede reanudar simplemente volviendo a emitir git svn clone

Sin embargo, esto duplicará algunas entradas en su .git / config, elimínelas y todo estará bien

zan-xhipe
fuente
From at least git 2.1.0...¿Alguna idea de si esta característica existía en git 1.9.1?
CivFan
Lo siento, ya no tengo repositorios svn para probar esto.
zan-xhipe
git svn fetchme causó una discrepancia en la suma de comprobación, y fue imposible restablecerlo porque aparentemente no había HEAD: / - pero esto funciona bien, solo tuve que eliminar el svn-remote.fetchde.git/config
OLL