La fusión del subtree de Git elimina los cambios en la twig que se fusiona con

Configuro dos repositorys usando la estructura descrita en el libro de Git aquí: http://git-scm.com/book/ch6-7.html . Básicamente, quería mantener una relación entre la copy de un repository y su twig principal sobre el origen. Sé que puedes hacer esto con los submodules, pero el process de actualizarlos me pareció un poco engorroso, y me dijeron (y leí) que era más fácil trabajar con los subtreees. De todos modos, configuro "RepoA" para tener un subtree de "RepoB" en él. Seguí los pasos provistos en el enlace a una camiseta.

He hecho modificaciones importantes al subtree en "RepoA". Al mismo time, otras personas de mi equipo están haciendo modificaciones al maestro en "RepoB". Cuando todo está dicho y listo, espero poder extraer los cambios del origen / master "RepoB" y del subtree fusionarlos en el subtree en RepoA. Sin embargo, cuando hago esto (usando la opción de combinación de subtree -s con –squash y –no-commit), se eliminan todos los cambios que realicé en el subtree en RepoA. ¡Incluso los nuevos files que agregué al subtree son eliminados! ¿Por qué es esto? ¿Entendí mal el uso de un subtree? ¿Lo estoy fusionando incorrectamente? ¡Cualquier ayuda sería muy apreciada!

Además, si es imposible fusionarlos adecuadamente con una combinación de subtree, ¿es mi única opción fusionarlos haciéndolo a mano, manualmente y creando una nueva estructura de proyecto?

¡Gracias!

Suponiendo que ya configura su RepoB como control remoto, intente esto:

git merge -s ours --no-commit RepoB/master

Más información aquí: https://help.github.com/articles/working-with-subtree-merge

El paso 'git read-tree' de la combinación del subtree de RepoB en RepoA no funciona si el subtree RepoB está presente. Omitir los resultados del tree de lectura en todos los files que se eliminan localmente. (comenzar de nuevo)

El subtree RepoB debe eliminarse localmente de git. Después de eso, git-read-tree funcionará, y la fusión será correcta tanto para los files como para el historial.

Comenzando con un clon de RepoA con un RepoB_subtree de una fusión previa.

 git remote add -f RepoB <RepoB-url> git merge -s ours --no-commit RepoB/master git rm -r RepoB_subtree git read-tree --prefix=RepoB_subtree/ -u RepoB/master git commit -m "Subtree merge of RepoB/master." 

La historia de RepoA muestra todo el bloque de confirmaciones de RepoB primero. Las confirmaciones de fusión del subtree anterior se muestran en RepoA sin ningún historial de RepoB.

La organización de la historia RepoB en RepoA no fue lineal en el time como esperaba, pero en retrospectiva, la historia del subtree RepoB en RepoA fue completa y fácil de leer.