git-subtree tirón complicaciones

Hemos intentado que Git-Subárree trabaje en un proyecto (con la versión de Git 1.7.9.4) y nos encontramos con una complicación. Alguien más anterior agregó el subtree con este command hace algunos meses:

git subtree add --prefix=foo git@example.com:foo.git master 

Ahora se han producido cambios sustanciales en foo y nos gustaría fusionarnos en esos cambios, idealmente aplastándolos. Ninguno de los files se ha modificado desde que se importaron.

Intenté tres cosas para intentar fusionarme en los cambios.

Primero:

 git subtree pull --squash -P foo git@example.com:foo.git master 

Que lanza la exception: Can't squash-merge: 'foo' was never added.

Segundo:

 git subtree pull -P foo git@example.com:foo.git master 

Esto funciona (más o less), pero tiene el problema de include todas las confirmaciones y tiene conflictos con los files que se han modificado.

Finalmente, intenté esto:

 git pull --squash -s subtree git@example.com:foo.git master 

Esto me da el resultado deseado, con la salida Automatic merge went well; stopped before committing as requested Automatic merge went well; stopped before committing as requested y todos los files aparecen como modificados (con el contenido correcto).

Idealmente, me gustaría continuar usando la primera versión de git-subtree y get un resultado cercano a la última versión. Si tenemos que usar la última versión de manera consistente en el futuro, lo haremos, pero estoy un poco confundido acerca de por qué el último no produce conflictos de fusión mientras que el del medio lo hace.

Cualquier ayuda es apreciada.

Tuve el mismo problema, y ​​en mi caso parece deberse a que la compilation del subtree inicial se fusionó en la twig principal.

Al examinar el origen del subtree encontré esto: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L224

Parece que el subtree greps tu git log para git-subtree-dir: foo pero no encuentra una confirmación adecuada. Prueba git log --grep="git-subtree-dir: foo/*\$" , y si hay algo extraño con esa confirmación, como ser una fusión, eso podría ser el problema.

Solo trabajar sin aplastar funcionó para mí, aparte de los molestos conflictos de fusión. Lo hice en una sucursal temporal que luego git merge --squash en otra sucursal para evitar una historia desorderada. Podría haber sido networkingiseñado en su lugar también, por supuesto.

He estado experimentando el mismo error Can't squash-merge: 'foo' was never added. con sourcetree 1.7.0 cada vez que hago un pull en un subtree. Sin embargo, creo que mi caso es diferente porque estoy usando subdirectorys.

Sourcetree hace algo de la siguiente manera:
git -c diff.mnemonicprefix=false -c core.quotepath=false subtree pull -P dir1\subdir1 --squash remote-repo master

Y obviamente, si tuviéramos que intentarlo de nuevo en Git Bash (Git versión 2.6.1.windows.1), sería:
git subtree pull -P "dir1\subdir1" --squash remote-repo master

Sin embargo, eso falló. Lo siguiente también falló aunque la syntax del command es correcta:
git subtree pull -P dir1/subdir1 --squash remote-repo master

La solución que encontré para hacerlo funcionar es usar Git Bash con el siguiente command:
git subtree pull -P "dir1/subdir" --squash remote-repo master

Supongo que todavía hay algo de trabajo por hacer para el motor de procesamiento de command-line de Git.