2009-10-20 16 views
37

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

En proyectos anteriores solía copiar dependencias manualmente en el árbol de trabajo de Git, añadiendo un pequeño archivo que especificaba la versión que uso.

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

He decidido probar los submódulos de Git para hacer la gestión. Cuanto más los pruebo, más frustrado me vuelvo. Incluso parece que la copia manual es, tal vez, mejor.

Estas son algunas de mis preocupaciones:

  • Ya no somos capaces de obtener estado del repositorio consistente con un solo comando (git checkout necesita ahora git submodule update --init).
  • No podemos utilizar algunas de las herramientas de Git correctamente (git archive es el más notable).
  • No podemos ver los cambios de estado/diffs en submódulos del proyecto principal.
  • Como acabo de encontrar de una manera difícil, git submodule no funciona con las opciones --git-dir y --work-tree, y requiere un cambio físico del directorio actual al "nivel superior del árbol de trabajo".

Parece que para optimizar el flujo de trabajo de nuestros submódulos (es decir, una operación == un comando) tenemos que escribir un contenedor bastante grueso alrededor de Git. Esto es triste.

Tenga en cuenta 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 una manera incorrecta? ¿Hay algún buen tutorial sobre el flujo de trabajo?

Hable incluso si no conoce la respuesta correcta, pero sí comparta mis inquietudes. :-)

+6

Uno de trampas mi otro favorito submódulos es decir, si se elimina un submódulo, y sustituirlo por un nuevo sub-módulo en el mismo lugar, se rompe el repositorio para todos los demás. (Por ejemplo, alguien bifurca una biblioteca en github y cambia el submódulo para que apunte a la bifurcación). La solución es eliminar el submódulo, hacer que todos tiren y actualicen, luego reemplazar el submódulo y hacer que todos tiren y actualicen de nuevo. –

+0

Pensé que alguien robó esta publicación y la publicó en habr sin referencia, pero luego miré el nombre ... :-D Aún así, una referencia a SO sería agradable, supongo. –

+1

Hay uno.Mire más de cerca los enlaces en el texto. –

Respuesta

11

En su lugar, puede probar git subtree(). He tenido mucha suerte con esto, utilizando repos remotos y limpios (desvinculados de master history) en mi proyecto.

+1

He probado el subárbol de git, y es muy superior a los submódulos de git para mis tareas. ¡Gracias! –

+0

El primer enlace está roto. Sé que proporcionas un enlace alt. Pero solo quería que supieras. – Eduardo

+0

@EduardoCereto - ambos enlaces funcionan bien en este momento. – FooF

Cuestiones relacionadas