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 clone
comando 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 -rN
opción donde N
está 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~3
con 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í)--depth
paragit 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/repo
La 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
n
commits. Pero en SVN (y, por lo tanto, en Git-SVN) tendrá que encontrar el número de revisión usted mismo.fuente
git-svn
puntero remoto al mismo lugar y usandogit-svn fetch
para obtener más del árbol. En ese punto, debe usargit filter-branch
para volver a pintar el árbol viejo (parcial) en la rama derecha.n
Me 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 log
y 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
/rebase
entre ellos. Commit toma un paso adicional (push
, luego,dcommit
desde 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 clone
pero 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 clone
para clonar las últimas 50 revisionesEncuentre la revisión N anterior de un repositorio SVN
fuente