2009-08-20 9 views
17

Anteriormente utilizamos muchos submódulos en nuestros repositorios principales, pero para aumentar la mantenibilidad de nuestros proyectos comenzamos una rama experimental donde los reemplazamos todos con subárboles.Git confundido al fusionar una actualización en mi subárbol

Esto funcionó bien, pero ahora, cuando estoy tratando de actualizar uno de los subárboles, combina erróneamente la actualización en un directorio completamente incorrecto que ni siquiera es un subárbol.

El repositorio principal, donde la rama "subárbol" contiene la rama experimental, es: git: //github.com/hugowetterberg/goodold_drupal.git

El repositorio de fusionarse en las actualizaciones de: git : //github.com/voxpelli/drupal-oembed.git

fusión haciendo: git merge -s subárbol oEmbed/maestro

La ruta de las actualizaciones se deben fusionarse en: sites/all/modules/oEmbed/

El camino por el que se fusionan en: módulos/agregador/traducciones/

Cualquier persona que tenga una idea de cómo obtener las actualizaciones en los subárboles o lo que el error ¿puede ser?

Respuesta

18

Lamentablemente, este es un error (o una característica que falta) en el código "git merge -s subreeree". En realidad, adivina los subárboles que desea fusionar. Por lo general, esto mágicamente resulta ser correcto, pero si su subárbol contiene muchos cambios (o estaba originalmente vacío, o lo que sea), entonces puede fallar espectacularmente.

La mejor manera de trabajar alrededor de ella es:

  1. combinar los archivos como lo hizo anteriormente.

  2. Mueva manualmente todos los archivos resultantes a donde se hayan ido.

  3. git commit -a --amend para corregir el compromiso de fusión.

Las fusiones futuras probablemente funcionen bien, a menos que este directorio tenga constantemente cantidades increíbles de flujo.

El comando experimental "git subtree" tiene un parámetro --prefix que debe dejar que se anula esto, pero desafortunadamente no funciona en este momento (ya que requiere trabajar en torno a "git merge -s subárbol" características y no tiene Ha llegado el momento de hacerlo).

De todos modos, esta debería ser una situación rara y la solución no será necesaria ni siquiera para futuras fusiones del mismo proyecto.

+7

me acaba de enviar un parche para git que le permitirá anular el sub árbol explotando explícitamente esa opción '-Xsubtree =', y fue aceptado. Búscalo en git 1.7.0 más o menos. – apenwarr

+2

Cuando trae una sola carpeta desde el repositorio de origen (por ejemplo, 'git read-tree --prefix = dest/-u source_repo/master: folder_in_repo /') en lugar de todo, fusionar cambios menores con el repositorio parece para que la carpeta completa se coloque en una nueva ubicación en el repositorio (es decir, duplicada). –

+0

No es esa situación rara, de hecho :-( –

Cuestiones relacionadas