¿Cómo clonar git-svn las últimas n revisiones de un repositorio Subversion?


Problema

¿Cómo se crea una copia superficial con git-svn desde un repositorio Subversion, por ejemplo, cómo se extrae 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

¿Existe 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 a extraer. Ejemplo:

git svn clone -rN svn://some/repo

De acuerdo con 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 última revisión 534. Eso funcionó, pero eso requiere que primero averigüe el número de revisión de la tercera pero última cometer.

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

Documentación

Git clone

Git-svn

Author: Lernkurve, 2009-04-14

3 answers

Ya ha descubierto la forma más sencilla de especificar un clon superficial en Git-SVN, especificando el número de revisión 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 n las confirmaciones. Pero en SVN (y por lo tanto en Git-SVN) tendrás que encontrar el número de revisión tú mismo.

 217
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-23 17:27:03

Me encuentro usando lo siguiente a menudo para obtener un número limitado de revisiones de nuestro enorme árbol de subversion (pronto llegaremos 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 una svn log y encontrar la primera en la rama (la última enumerada al hacerlo):

svn log --stop-on-copy svn://some/repo/branch/some-branch

Hasta ahora no he encontrado realmente la molestia vale la pena en el seguimiento de todas las ramas. Lleva demasiado tiempo clonar y svn y git no funcionan juntos tan bien como lo haría yo como. Tiendo a crear archivos de parche y aplicarlos en el clon de git de otra rama svn.

 85
Author: Christian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-27 19:26:26

... 7 años más tarde, en el desierto, un tumbleweed sopla por ...

No estaba satisfecho con la respuesta aceptada, así que creé algunos scripts para hacer esto por ti disponibles en Github. Estos deberían 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 del historial (tal vez esté clonando un montón de repositorios). Aquí podemos clonar la última N revisiones:

Use 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     
 27
Author: jonathan.cone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-26 20:31:32