limpiar - ¿Cómo git-svn clonar las últimas n revisiones de un repositorio de Subversion?
limpiar git (3)
Problema
¿Cómo creas una copia superficial con git-svn desde un repositorio de Subversion, por ejemplo, cómo haces solo las últimas tres revisiones?
El comando git clone
puede obtener las últimas n revisiones de un repositorio Git si utiliza 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 opción -rN
donde N
es la revisión que se debe 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 reemplacé HEAD~3
con el número real de la tercera, pero la ú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
Me encuentro a menudo usando lo siguiente para obtener un número limitado de revisiones de nuestro enorme árbol de subversión (pronto estaremos llegando a la revisión svn 35000).
# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision ''N''
cd some-branch
git svn rebase
Y una buena manera de averiguar dónde comenzó una rama es hacer un svn log
y encontrar la primera en la rama (la última en la lista al hacer):
svn log --stop-on-copy svn://some/repo/branch/some-branch
Hasta ahora no he encontrado realmente la molestia en el seguimiento de todas las sucursales. Lleva demasiado tiempo clonar, y svn y git no funcionan juntos como me gustaría. Tiendo a crear archivos de parches y aplicarlos en el clon git de otra rama svn.
Ya descubrió 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 clonación en ( -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 n
confirmar. Pero en SVN (y por lo tanto en Git-SVN) tendrás que encontrar el número de revisión por ti mismo.
... 7 años más tarde, en el desierto, una tumbleweed sopla por ...
No estaba satisfecho con la respuesta aceptada, así que creé algunos scripts para hacer esto por ti, disponibles 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 en medio de la historia (tal vez esté clonando un montón de repos). Aquí solo podemos clonar las últimas revisiones de N:
Usa git svn clone
para clonar las últimas 50 revisiones
# -u The SVN URL to clone
# -l The limit of revisions
# -o The output directory
./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt
Encuentra la revisión N anterior de un repositorio SVN
# -u The SVN URL to clone
# -l The limit of revisions
./svn-lookback.sh -u https://server/project/trunk -l 5