Problema
¿Cómo se crea una copia superficial con git-svn desde un repositorio de Subversion, por ejemplo, cómo extrae solo las últimas tres revisiones?
El git clonecomando puede obtener las últimas n revisiones de un repositorio de Git si usa la opción --depth, es decir, obtiene una copia superficial del repositorio. Ejemplo:
git clone --depth 3 git://some/repo myshallowcopyrepo
¿Hay una opción similar para git-svn?
Mis descubrimientos hasta ahora
Hasta ahora solo he encontrado la -rNopción donde Nestá la revisión para extraer. Ejemplo:
git svn clone -rN svn://some/repo
Según la documentación existe la posibilidad de utilizar -r$REVNUMBER:HEAD. Intenté lo siguiente para obtener las últimas 3 revisiones que devolvieron un mensaje de error.
$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn
Así que lo reemplacé HEAD~3con el número real de la tercera pero última revisión 534. Eso funcionó, pero eso requiere que primero averigüe el número de revisión de la tercera pero última confirmación.
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Documentación

-s is for --stdlayout which presumes the svn recommended layout for tags, trunk, and branches.(pero no funcionó para mí)--depthparagit svn, ya que el apoyo que ya está ahí. ¿Y ya tiene que averiguar las últimas revoluciones del servidor?Respuestas:
Ya ha descubierto la forma más sencilla de especificar un clon superficial en Git-SVN, especificando el número de revisión de SVN en el que desea iniciar su clon (
-r$REV:HEAD).Por ejemplo:
git svn clone -s -r1450:HEAD some/svn/repoLa estructura de datos de Git se basa en punteros en un gráfico acíclico dirigido (DAG), lo que hace que sea trivial retroceder los
ncommits. Pero en SVN (y, por lo tanto, en Git-SVN) tendrá que encontrar el número de revisión usted mismo.fuente
git-svnpuntero remoto al mismo lugar y usandogit-svn fetchpara obtener más del árbol. En ese punto, debe usargit filter-branchpara volver a pintar el árbol viejo (parcial) en la rama derecha.nMe encuentro usando lo siguiente a menudo para obtener un número limitado de revisiones de nuestro enorme árbol de subversión (pronto llegaremos a svn revision 35000).
Y una buena manera de averiguar dónde comenzó una rama es hacerlo
svn logy encontrar la primera en la rama (la última que aparece al hacer):Hasta ahora no he encontrado realmente la molestia de rastrear todas las ramas. Se necesita demasiado tiempo para clonar y svn y git no funcionan juntos tan bien como me gustaría. Tiendo a crear archivos de parches y aplicarlos en el clon git de otra rama svn.
fuente
cherry-pick/rebaseentre ellos. Commit toma un paso adicional (push, luego,dcommitdesde un repositorio remoto), pero creo que vale la pena la compensación.... 7 años después, en el desierto, una planta rodadora sopla ...
No estaba satisfecho con la respuesta aceptada, así que creé algunos scripts para hacer esto disponible en Github . Esto debería ayudar a cualquiera que quiera usar
git svn clonepero no quiera clonar todo el repositorio y no quiera buscar una revisión específica para clonar desde la mitad de la historia (tal vez esté clonando un montón de repositorios). Aquí podemos clonar las últimas N revisiones:Use
git svn clonepara clonar las últimas 50 revisionesEncuentre la revisión N anterior de un repositorio SVN
fuente