La mejor manera de cambiar versiones de repository de Android de manera eficiente una vez descargado utilizando repository / git

Tengo una situación en la que necesito crear un set de copys estáticas del código fuente de Android de diferentes versiones de lanzamiento.

Simplemente haciendo un repo init -b $version; repo sync repo init -b $version; repo sync tardará una eternidad ( init requiere interacción, y las sincronizaciones desperdiciarán mi ancho de banda en todas las versiones).

Mi configuration actual es download una versión base (digamos 1.6_r1), copyrla en una nueva carpeta (android-1.6_r2) y luego volver a ejecutar init y sincronizar ( repo init -b android-1.6_r2; repo sync ). Sin embargo, la synchronization falla a veces, con errores como:

ndk / build / platforms / android-3 / arch-arm / usr / incl
Aborto
Sincronizar tree de trabajo: 100% (153/153), hecho.

error: desarrollo /: plataforma / desarrollo checkout caf83cb2b0ffde1a4cfb7cb258cbe012e283d9e1 Repo sync devuelto FAIL en android-2.1_r2.1s

He encontrado algunas publicaciones con errores similares que indican que esto podría deberse a que el repository no está sincronizado con los files "modificados" en el sistema de files, pero me pregunto si mis errores se deben a cambios de versiones en la memory del repository.

¿Es esta la manera correcta de cambiar las versiones del repository? De manera más general, ¿existe una forma eficiente de time / ancho de banda para convertir un repository android-1.6_r1 en un android-1.6_r2 ?

( ACTUALIZACIÓN : mi respuesta inicial implica que podemos iniciar incrementalmente un nuevo repository de un anterior, por ejemplo 1.6_r1 a 1.6_r2, pero la configuration correcta debería haber sido tener un repository local de "espejo principal" donde podamos señalar la reference a cuando comienzo un nuevo init. He modificado el text a continuación para evitar la implicación incorrecta).

En lugar de copyr, intente agregar --reference=/path/to/main/repo a su command repo init en el nuevo directory.

Por ejemplo, si ya tiene un repository en el directory /repos/aosp-main descargado anteriormente (y sincronizado con googlesource.com), puede hacer:

 $ mkdir /repos/aosp-1.6_r1 $ cd /repos/aosp-1.6_r1 $ repo init -b android-1.6_r1 -u https://android.googlesource.com/platform/manifest --reference=/repos/aosp-main $ repo sync 

Y luego, si quieres una versión diferente:

 $ mkdir /repos/aosp-1.6_r2 $ cd /repos/aosp-1.6_r2 $ repo init -b android-1.6_r2 -u https://android.googlesource.com/platform/manifest --reference=/repos/aosp-main $ repo sync 

De esta forma, solo tenemos que sincronizar con la dirección de googlesource.com cuando hay cosas nuevas que aún no hemos descargado y solo debe usar el repository principal ya sincronizado para inicializar repos adicionales localmente.

¿Se ha asegurado de actualizar el script del repository solo para estar seguro?

 $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo