"Submodules" en git: trenza o subtree u otra cosa

Para include algunos repositorys de git externos en mi repository "principal", hay algunas opciones:

El primero parece ser desaconsejado por todo el mundo. El segundo y el tercero, creo, son implementaciones del patrón de subtree.

¿Es uno mejor? ¿Qué debería usar? ¿Por qué? ¿Cómo puedo elegir entre ellos?

  • submodule es genial para:

    • hacer reference a una confirmación específica de otro repository (equivalente verdadero de svn externo con numbers de revisión explícitos ),
    • mantener los dos historiales (el repository principal y el repository externo) separados (como en un enfoque basado en componentes ).
  • El subtree es ideal para include el historial de un repository en otro.

Entonces, si esos pocos repositorys externos no tienen vocación de terminar con todas las tags y el historial de confirmación del principal padre principal, use submodules.
De lo contrario, el subtree está bien.