2011-11-02 23 views
8

Me gustaría crear la siguiente configuración para mis repositorios git:git fusión de las ramas en un repositorio desnudo

que actualmente tiene un repositorio git local con todos mis archivos de trabajo. Me gustaría poder configurar un repositorio desnudo central y otros dos repositorios completos, uno para una aplicación en vivo y otro para una versión de prueba.

Me gustaría ser capaz de empujar los cambios desde el local al repositorio central de desnudo en una rama de pruebas. Luego, en mi informe de prueba, siempre saco de la rama de prueba del repositorio desnudo.

Cuando esté listo para ir a vivir con los cambios, me gustaría ser capaz de fusionar mi rama de pruebas y mi rama principal en el repositorio central de desnudos. Entonces el repositorio en vivo podría extraer de la rama principal.

Así, en este esquema, la prueba de recompra se tire siempre de la rama de pruebas, y la cesión temporal en vivo siempre se tire de la rama principal.

Sin embargo, no puedo entender cómo fusionar ramas en un repositorio simple. git-merge y git-checkout no parecen funcionar sin el árbol de trabajo.

Por lo tanto, mi pregunta es doble:

  1. ¿Hay una manera estándar para combinar las ramas de un acuerdo de recompra al descubierto?
  2. ¿No es esto directo porque la configuración de mis repos es mala? (En cuyo caso, ¿cómo modificaría esta arquitectura para las mejores prácticas?)
+0

Esto es exactamente donde yo estoy, el escenario que usted describe es la más común. –

Respuesta

10

git checkout revisa una rama en el árbol de trabajo, ¿cómo cree que debería haber funcionado sin un árbol funcional? Y git merge y la mayoría de los otros comandos no funcionan, porque no hay HEAD dentro de un repositorio simple.

Para responder a su pregunta: No trabaja en el repositorio vacío. Un repositorio desnudo solo está ahí para guardar los datos; si quieres trabajar con él, utiliza un clon que no esté vacío.

Así que de cualquier otro repositorio, se tira desde el repositorio desnudo, se funden localmente y empujar los cambios de nuevo a él. Deberías hacer esto desde tu repositorio de desarrollo por cierto. para que los repositorios de prueba y de prueba solo se extraigan de su rama.

+0

¡Gracias! Haré la fusión en mi repositorio local. – user480029

2

primero debe clon del repositorio desnudo, fusionar su rama, a continuación, empuje al desnudo repositorio nuevo. Porque no tienes ningún árbol de trabajo en repositorios simples para resolver conflictos.

8

Nota, en realidad esto puede ser realizado sobre un acuerdo de recompra desnuda, pero hay que evitar la interfaz normal.

$ git read-tree -i -m branch1 branch2 
$ COMMIT=$(git commit-tree $(git write-tree) -p branch1 -p branch2 < commit message) 
$ git update-ref mergedbranch $COMMIT 
Cuestiones relacionadas