Flujo de trabajo de submodules Git

En mi proyecto, necesito usar código de terceros, almacenado en varios repositorys de Git. Mi proyecto también se almacena en el repository de Git (por separado). Hay varias personas trabajando conmigo en el proyecto principal, y yo soy el mantenedor.

En proyectos anteriores solía copyr dependencies manualmente en el tree de trabajo de Git, agregando un pequeño file que especificaba la versión que uso.

Ahora, esto es bastante incómodo ya que necesito actualizar diariamente una de las dependencies, y muchas veces contribuyo con un código, la mayoría del time junto con cambios en el proyecto principal.

Decidí probar los submodules de Git para hacer la gestión. Cuanto más los pruebo, más frustrado me vuelvo. Incluso parece que la copy manual es, tal vez, mejor.

Estas son algunas de mis preocupaciones:

  • Ya no podemos get un estado de repository constante con un solo command ( git checkout ahora necesita la git submodule update --init ).
  • No podemos usar algunas de las herramientas de Git correctamente (el git archive es el más notable).
  • No podemos ver los cambios de estado / diffs en submodules del proyecto principal.
  • Como acabo de descubrir de una manera difícil, el git submodule no funciona con las --git-dir y --work-tree , y requiere un cambio físico del directory actual al "nivel superior del tree de trabajo".

Parece que para simplificar el flujo de trabajo de nuestros submodules (es decir, una operación == un command) tenemos que escribir un contenedor bastante grueso alnetworkingedor de Git. Esto es triste.

Tenga en count que no es una opción alejarse de Git o fusionar el desarrollo de subproyectos por completo en el proyecto principal.

Tal vez estoy usando git submodules de git submodules de una manera incorrecta? ¿Hay algún buen tutorial sobre el flujo de trabajo?

Por favor, hable incluso si no conoce la respuesta correcta, pero sí comparta mis inquietudes. 🙂

Es posible que desee probar git subtree ( alt link ) en su lugar. He tenido mucha suerte con esto, utilizando repos remotos y twigs limpias (desvinculadas de la historia master ) en mi proyecto.

Un hilo reciente en la list de correo de git incluye un parche sobre cómo get un estado de depósito coherente con un solo command. Básicamente llama a la actualización del submodule de git cuando se cambian las twigs.

http://thread.gmane.org/gmane.comp.version-control.git/130155/focus=130330