Actualización del submodule Git: la reference no es un tree … pero se compromete SI

Antes que nada: sí, revisé este hilo al revés, pero mi situación es diferente.

Tenemos tres modules aquí:

  • una aplicación A
  • su biblioteca base B (un submodule de A )
  • un componente C (un submodule de B )

Al intentar hacer git clone --recursive https://url_of_A/ , obtenemos un error cuando git intenta capturar C :

 Cloning into 'path/of/C'... [...] Checking connectivity... done fatal: reference is not a tree: 92405dd9027a2d55d9dd6f5b26494eee0009e297 Unable to checkout '92405dd9027a2d55d9dd6f5b26494eee0009e297' in submodule path 'path/to/C' 

Pero adivina qué, no hay ningún error cuando hacemos git clone --recursive https://url_of_B/ – aunque la revisión para verificar es claramente la misma :

 Cloning into 'path/of/C'... Checking connectivity... done Submodule path 'path/to/C': checked out '92405dd9027a2d55d9dd6f5b26494eee0009e297' 

… ¡aunque los pathes remotos a C son lo mismo!

Lo que es aún más desconcertante: este comportamiento se observa en las máquinas con Windows 7/8 solamente (hasta ahora, al less). Las máquinas con Windows Vista / XP realizan de alguna manera la clonación profunda con los mismos repositorys sin problemas técnicos, y realmente me pregunto cómo es posible que eso dependa de la plataforma.


Eso es para el caso, ahora las preguntas: 1) ¿Hay alguien con el mismo problema, y ​​2) ¿cuáles podrían ser las soluciones? Tenga en count que todos los componentes (A, B y C) no están bajo nuestro control, por lo que 'cambiar a git-tree' y cosas por el estilo no funcionarán, desafortunadamente.

Como primera respuesta (incompleta), muchas correcciones de submodules fueron entre git 1.8.4 y 1.8.5.2:

 C:\Users\VonC\prog\git\git>git log -Ssubmodule v1.8.4..v1.8.5.2 
  • commit ac1fbbda201 : submodule : no copie el modo de actualización desconocido de .gitmodules
  • commit 746593bdcaf : refs : eliminar la function no utilizada invalidate_ref_cache
  • commit 04c1ee576ac : mv : reparación de advertencia falsa cuando se mueve un file en presencia de submodules
  • commit 927b26f87a5 : submodule: no imprimir salida de estado con ignore=all
  • commit 4b054402833 : evitar segfault en el submodule. *. ruta establecida en un "true" vacío
  • commit 95c16418f03 : rm : delete .gitmodules input de submodules eliminados del tree de trabajo
  • commit 0656781fadc : mv : actualiza la input de la ruta en .gitmodules para los submodules movidos
  • commit 8745024422d : parse_pathspec : compatibilidad con la eliminación / comprobación de routes de submodules

Es posible que uno de esos parches mejore la solidez de la característica del submodule.
Por ejemplo, el problema de msysgit que mencionas ( problema 99 ) podría resolverse con commit 4b054402833 .