git es un manejador de versiones distribuido bastante interesante, que tiene una interfaz con Subversion llamada git-svn.
git
Si están en un sistema Debian o uno de sus sitemas derivados, instalarlo es sencillo:
apt-get install git-svn
Para clonar un repositorio svn completo es necesario especificar qué carpetas son el tronco, las ramas y las etiquetas, de modo que git pueda identificarlas.
Así que para clonar un repositorio svn en teoría sólo se necesita hacer lo que dice el manual
git svn clone http://svn.example.com/project -T trunk -b branches -t tags
Sin embargo, lo que hace git-svn clone
es recabar cada uno de los commits realizados en el repositorio svn para almacenarlos en revisiones locales, como es natural pensar. Y justamente eso hace que sea muy costoso clonar un repositorio de un proyecto con muchos commits, por ejemplo uno de 18092 commits :D.
El problema es muy pequeño: ¿qué pasa si por alguna razón se pierde la conexión en el commit 15000? ¿se necesita rehacer la descarga? (notar que esta descarga podría demorar más o menos 1 día según la velocidad de conexión con el servidor svn, velocidad de PC local, etc)
La respuesta es no felizmente
Cuando se están descargando las revisiones de subversion sólo se escribe el índice y no el árbol de archivos y carpetas, así que no encontrarán nada en el directorio que están clonando excepto la carpeta .git
.
Luego que se haya cortado la descarga lo que tenemos que hacer es:
- reescribir nuestra rama
master
(a la que apunta por defectoHEAD
), a la última revisión obtenida(es sencillo ver cuál es el último hash en la salida del comando), esto es: si el hash esb977ed6c9b4a1c758b6c230d8f8e507ce78e074e
:
echo b977ed6c9b4a1c758b6c230d8f8e507ce78e074e > .git/refs/heads/master
- Luego de eso, ya sólo nos queda forzar quedarnos en la última versión descargada:
git reset --hard
- Y cuando querramos seguir decargando el repo, pues actualizamos normalmente:
git svn rebase --all
Comments
Gracias compadre justo lo…
Gracias compadre justo lo que buscaba