source - Clonar fuentes de Android en un servidor de repositorio local
repo sync (1)
Quiero desarrollar sobre Android utilizando un servidor de repositorio de Android local. Necesito agregar varios nuevos repositorios git a la jerarquía de gits, y necesito modificar las fuentes existentes de Android para una adaptación personalizada de Android.
¿Cuál es la forma "correcta" de clonar todo el árbol de origen de Android de los repositorios de git, de modo que pueda empujar / jalar a / desde un servidor de repositorio local común, y aún así fácilmente extraer nuevos cambios de Android en sentido ascendente?
Estoy buscando específicamente consejos sobre cómo usar el script de repo
para interactuar con mi propio servidor, y cómo configurar el repositorio de git de manifest
y administrar las sucursales en él.
En tu servidor git
- repo init -u https://android.googlesource.com/platform/manifest --mirror # --mirror es la clave
- sincronización de repo
Debido a que especificó --mirror, todos los repositorios creados serán repositorios ''simples'', que es la manera correcta de crear un espejo a menos que usted sea un uberlord de git.
En su cliente:
repo init -u [email protected]: platform / manifest.git # puede usar un medio diferente para acceder a su servidor git; Tengo que asumir algo para este ejemplo.
no hay sincronización de recompra todavía. Tu manifiesto es probablemente incorrecto Mire el enlace simbólico .repo / manifest.xml ... cat it y lea en la parte superior el
<remote fetch=""
... probablemente apunta de nuevo a android.googlesource.com. pero si dice ''...'', creo que eso significa ''volver a mi servidor'', por lo que puede saltar al paso 6). Pero si apunta a otro servidor (no al suyo), vaya al paso 3.- cd .repo / manifiestos
- vim .repo / manifests / default.xml (o cualquiera que sea su manifest.xml activo).
- Arregle el archivo default.xml
<remote fetch="CHANGE ME"
para que apunte a su servidor git - intente una sincronización de repos. Debería tirar solo de su repositorio. Si no es así, detenga la sincronización de repo e intente arreglar default.xml nuevamente.
- Una vez que vea el trabajo de sincronización de repo en su máquina de prueba, luego vuelva a confirmar default.xml (
git commit; git push
), para que los demás miembros del equipo tengan la experiencia de ''no-manifest-edit'' cuandorepo init; repo sync
repo init; repo sync
desde su servidor.
Una vez que veas un ''no edición de manifiesto'' repo init; repo sync
repo init; repo sync
trabajo, luego vuelva a su archivo default.xml, y simplemente comience a agregar nuevos elementos XML junto con las toneladas de otros elementos de proyectos de Android existentes; Estos nuevos elementos apuntarán a tus proyectos personalizados. Para estos nuevos proyectos, simplemente inicíelos como lo harías normalmente, y asegúrate de que tengan una rama que coincida con la misma <default revision="whatever_branch_you_see_here"
para que una repo sync
tenga éxito cuando se encuentre con estos nuevos proyectos.
Si de hecho establece una rama predeterminada en su elemento de manifiesto <default revision=""
, haga que todos establezcan una rama local configurada para seguir la rama remota especificada en el atributo de revisión. Entonces, por ejemplo, si <default revision="branch_a"
está en su manifiesto, después de hacer una sincronización de recompra, cuando haga un cd en un subproyecto de interés, haga lo siguiente:
git checkout -b branch_a origin/branch_a
Luego, si el usuario git push
(no hay un comando de repo para presionar, por lo que yo sé), y si alguien más realiza una ./repo sync
después de ese empuje, obtendrán esos cambios del usuario original. ... siempre y cuando esté utilizando el mismo manifiesto y, de hecho, presione la revisión predeterminada (rama) especificada por ese manifiesto.
Esa es la receta más sencilla. Si desea crear ramas de características reales, tendrá que editar su manifiesto con más frecuencia si desea que la ''sincronización de repositorio'' funcione simplemente ... y deberá comunicarse con el resto del equipo para obtener su versión de El manifiesto cuando haces eso. Alternativamente, si solo estás en uno o dos repositorios de git, entonces puedes renunciar a la sincronización de repositorios y presionar / tirar de manera normal en esos repositorios e ignorar el resto del árbol silencioso en los momentos en los que estás iterando. Esto suena, en última instancia, para mí, como un camino más simple. Ignoraría el repo tanto como puedas; solo usándolo para las sincronizaciones de ''todos los proyectos'' y dejándolo solo para los momentos en que se está enfocando en 1 o 2 proyectos.
En cuanto a obtener actualizaciones de upstream. Creo que la forma de hacerlo es cambiar tu default.xml para que apunte a tu ubicación original de git (como android.googlesource.com), hacer una sincronización de repositorio para hacer que todas las cosas nuevas se fusionen, y una vez hecho con la sincronizar, cometer de nuevo a su repositorio. No he hecho esto todavía; así que no puedo ser demasiado específico, pero así es como planeo hacerlo.
Estoy ignorando los detalles de la administración del servidor arriba. Por ejemplo, debe llamar al inicio de repo en un directorio determinado de su servidor git para que sea un repositorio de git disponible; Supongo que sabes cómo administrar tu servidor git.