Clonación de fuentes de Android a un servidor de repositorio local

Quiero desarrollar en la parte superior de Android usando un servidor de repositorio Android local. Necesito agregar varios nuevos repositorios de git a la jerarquía de gits, y necesito modificar fuentes androides existentes para una adaptación de encargo de Androide.

¿Cuál es la forma "correcta" de clonar todo el árbol de fuentes de Android de los repositorios git, de modo que pueda empujar / extraer de / hacia un servidor de repositorio local común y aún así sacar fácilmente nuevos cambios de Android desde arriba?

Estoy buscando específicamente consejo en cómo utilizar el guión del repo para la interacción con mi propio servidor, y cómo fijar el depósito del git del manifest y las ramas que manejan en él.

En tu servidor git

  1. Repo init -u https://android.googlesource.com/platform/manifest –mirror # –mirror es la clave
  2. Sincronización de repo

Debido a que especificaste –mirror, todos los repos creados serán reposos 'nus', que es la forma correcta de crear un espejo a menos que seas un uberlord git.

En su cliente:

  1. Repo init -u [email protected]: platform / manifest.git # se puede utilizar un medio diferente de acceder a su servidor git; Tengo que asumir algo para este ejemplo.

  2. No hay sincronización de repo todavía. Su manifiesto probablemente esté equivocado. Mire el enlace simbólico vinculado .repo / manifest.xml … cat y lea en la parte superior el <remote fetch="" … probablemente apunte hacia android.googlesource.com. Pero si dice ".." Creo que significa "volver a mi servidor", por lo que puede saltar al paso 6). Pero si se apunta de nuevo a otro servidor (no el tuyo), entonces vaya al paso 3.

  3. Cd .repo / manifests
  4. Vim .repo / manifests / default.xml (o lo que sea que sea tu manifest.xml activo).
  5. Arreglar el archivo <remote fetch="CHANGE ME" default.xml para volver al servidor git
  6. Intentar una sincronización de repo. Debe extraer sólo de su repositorio. Si no lo hace, detenga la sincronización de repo y trate de corregir default.xml de nuevo.
  7. Una vez que vea el trabajo de sincronización de repo en su máquina de prueba, entonces vuelva a ejecutar default.xml ( git commit; git push ), para que otros miembros del equipo tengan experiencia 'no-manifest-edit' cuando repo init; repo sync repo init; repo sync de su servidor.

Una vez que vea un 'no manifest edit' repo init; repo sync repo init; repo sync trabajo, a continuación, vaya a su default.xml de nuevo, y acaba de comenzar a agregar nuevos elementos XML junto con las toneladas de otros elementos del proyecto Android existentes; Estos nuevos elementos apuntarán a sus proyectos personalizados. Para estos nuevos proyectos, sólo git init ellos como lo haría normalmente, y asegúrese de que tienen una rama que coincida con la misma <default revision="whatever_branch_you_see_here" para que una repo sync tendrá éxito cuando se encuentra con estos nuevos proyectos.

Si de hecho establece una rama predeterminada en su elemento <default revision="" manifiesto, simplemente haga que todos hagan una rama local establecida para seguir la rama remota especificada en el atributo de revisión. Así, por ejemplo, si <default revision="branch_a" está en su manifiesto, después de hacer una sincronización de repo, cuando haga cd en un subproyecto de interés, haga un:

git checkout -b branch_a origin/branch_a

Entonces, si el usuario git push 's (no hay ningún comando de repo a empujar, por lo que sé), y si alguien hace una ./repo sync después de ese empuje, obtendrá esos cambios desde el usuario original … siempre y cuando esté usando el mismo manifiesto y realmente empujando a la revisión por defecto (rama) especificada por ese manifiesto.

Esa es la receta más simple. Si quieres hacer ramas de funciones reales, entonces tendrás que editar tu manifiesto con más regularidad si quieres que la sincronización de repo sólo funcione … y tendrás que comunicarte al resto del equipo para tomar tu versión de El manifiesto cuando haces eso. Por otra parte, si es sólo uno o dos reposos git que está tocando, entonces podría renunciar a la sincronización de repo y git push / pull como normal en esos repos y ignorar el resto del árbol tranquilo para las veces que están iterando fuertemente. Esto suena, en última instancia a mí, como un camino más simple. Ignoro el repo tanto como puedas; Sólo usarlo para "todo el proyecto" se sincroniza y dejarlo solo para las veces que se está centrando en 1 o 2 proyectos.

En cuanto a obtener actualizaciones de aguas arriba. Creo que la forma de hacerlo es cambiar tu default.xml para que vuelva a su ubicación original de git (como android.googlesource.com), hacer una sincronización de repo para hacer que todas las cosas nuevas se fusionen, y una vez hecho con el Sincronizar, volver a realizar la copia de seguridad de su repo. No he hecho esto todavía; Así que no puedo ser demasiado específico, pero así es como pienso hacerlo.

Ignoro los detalles de la administración del servidor arriba. Por ejemplo, es necesario llamar al repo init en un determinado directorio de su servidor git para que sea un repositorio git disponible; Supongo que sabes cómo administrar tu servidor git.

  • ¿Qué sucede detrás de las escenas cuando hago una sincronización de repo?
  • Android Repo init fallido
  • Android Source, Git / Repo y error: '... / .repo / repo / .git / clone.bundle' no se parece a un archivo de paquete v2
  • Cuando la sincronización repo, se detiene en los proyectos de recolección: 100% (293/293), hecho
  • Repo con manifiesto local no funciona
  • Cómo usar "repo" para clonar la fuente androide mínimo?
  • Android - ¿Añadir una nueva biblioteca al repo?
  • La mejor manera de cambiar las versiones del repositorio de android eficientemente una vez descargado usando repo / git
  • Comando de repo de Android y ramas de conmutación
  • Cómo reanudar la sincronización de repo
  • ¿Cómo puedo compartir código a través de git con otros que tengan el repositorio de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.