2010-04-20 26 views
105

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 conmigo. ¿Hay alguna manera de reanudar la operación sin rehacer todo el trabajo inicial?Reanudar clon git-svn

Respuesta

140

El comando git svn fetch para reanudar una git svn clone es confirmado por varias fuentes:

(Por cierto, si durante el clon inicial paso su conexión muere o si necesita deténgalo y luego, para reanudar el clon, solo tiene que ejecutar el comando anterior para reanudar la descarga del historial).

Parece que hay una pérdida de memoria en git-svn. El tamaño del proceso git-svn creció lentamente y después de unas dos semanas tenía un tamaño de residente de 1,2 GB, momento en el que el sistema operativo se negó a dejarlo.
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 adquirí el hábito de interrumpir y reiniciar el proceso todas las noches y todas las mañanas. Unos días más tarde ya estaba hecho.

Se comienza sus aventuras con git-svn por clonación de un repositorio Subversion existente:

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

La bandera -s asume que y nuestro repositorio usa la convención "trunk, branches, tags". De lo contrario, debe especificar manualmente qué directorios representan ramas y etiquetas, si desea que Git los conozca.

Esto llevará mucho tiempo, ya que buscará cada revisión desde SVN y confirmará localmente. Si por alguna razón se detiene, puede continuar con git svn fetch.

+1

Creo que algunas de las opciones de línea de comandos proporcionadas a 'git svn clone' también deben proporcionarse (según corresponda) a' git svn fetch'. Por ejemplo, he establecido '-r HEAD' para' git svn clone' para obtener solo la revisión HEAD SVN. Para reanudar, ejecuté 'git svn fetch', que comenzó a importar todas las revisiones. – amolbk

+0

Esto comenzó todo desde la primera revisión ... ¡Tengo 10.000 compromisos! ¿Alguna idea sobre cómo * reanudar * desde donde quedó? –

+0

@ NathanJ.Brauer no en la cima de mi cabeza. Podrías hacer una nueva pregunta (con el sistema operativo, la versión de git y la versión svn utilizada, y un enlace a esta respuesta para el contexto) – VonC

14

Encontré a blog post que proporcionó lo que (espero) es una respuesta correcta.

Aparentemente, ejecutar git svn fetch completa de forma efectiva la operación de clonación. ¡Aquí está esperando!

+7

que tendrá que utilizar 'git svn rebase' después de la búsqueda para completar la operación y hacer que la rama principal refleje el tronco –

+0

¿Podría proporcionar un enlace a la publicación del blog para referencia futura? – jmanning2k

5

Como VonC, CaptainAwesomePants y Archi dijeron git svn fetch hace el truco. Estaba haciendo un git svn clone url... --authors-file=path/to/file y el clon falló porque uno de los autores no estaba en el archivo de autores.Agregué el autor al archivo y ejecuté git svn fetch y continuó desde donde se quedó y mirando el registro de git más tarde, parece que usó el autor recién agregado para reemplazar el nombre del autor de la transacción, así que todo fue lindo.

+0

¡lo mismo aquí! ¡Gracias por tu publicación! –

3

Desde al menos Git 2.1.0 se puede reanudar con sólo volver a emitir git svn clone

Sin embargo, esto va a duplicar algunas entradas en su .git/config eliminar esos y todo estará bien

+0

'De al menos git 2.1.0 ...' ¿Alguna idea de si esta característica existió en git 1.9.1? – CivFan

+0

Lo siento, ya no tengo ningún repositorio svn para probar esto. –

+0

'git svn fetch' provocó una falta de coincidencia de suma de comprobación para mí, y era imposible restablecerlo porque al parecer no había HEAD:/- pero esto funciona bien, solo tenía que eliminar' svn-remote.fetch' de '.git/config ' – OLL