Creo que el problema aquí es un desajuste entre el diseño de Git y el problema que está tratando de resolver.
Git es bueno para hacer el seguimiento de Árboles. Las relaciones de dependencia entre proyectos pueden (y probablemente lo hagan) formar un Gráfico. Un árbol es un gráfico, pero un gráfico no es necesariamente un árbol. Dado que su problema es cómo representar efectivamente un gráfico, un árbol no es la mejor herramienta para el trabajo.
Aquí es un enfoque que podría funcionar:
Un proyecto Git tiene un directorio .gitmodules donde registra "sugerencias" que indica que proyecta un commit puede depender, en los que se pueden encontrar, y qué camino dentro del proyecto se espera que sean insertados en. (http://osdir.com/ml/git/2009-04/msg00746.html)
Puede agregar un script que lea esta información de un conjunto de proyectos, asigna las sugerencias encontradas en el archivo .gitmodules de cada proyecto a las ubicaciones en el sistema de archivos donde esos proyectos se han colocado y luego agrega símbolos enlaces desde las rutas en las que git espera ver los submódulos en las ubicaciones reales del sistema de archivos de los respectivos proyectos.
Este enfoque usa enlaces simbólicos para salir del molde Árbol y construir un Gráfico. Si grabamos los enlaces directamente en los repositorios git, tendríamos rutas relativas específicas para nuestra configuración local registradas en los proyectos individuales, y los proyectos no serían "totalmente independientes" como usted quería. Por lo tanto, la secuencia de comandos para construir dinámicamente los enlaces simbólicos.
Estoy pensando que este enfoque podría interferir con git de formas no deseadas, ya que hemos tomado caminos donde espera encontrar una cosa, y ponemos algo más allí. Tal vez podríamos .gitignore las rutas de enlace simbólico. Pero ahora estamos escribiendo esos caminos dos veces y violando DRY. En este punto, también nos hemos alejado bastante de pretender usar submódulos. Podríamos registrar las dependencias en otro lugar en cada proyecto, y dejar el archivo .gitmodules para las cosas que git espera. Así que crearemos nuestro propio archivo, digamos, .dependencias, y cada proyecto puede indicar sus dependencias allí. Nuestro script se verá allí y luego irá y construirá sus enlaces simbólicos.
Hmm, creo que puede haber simplemente se describe un sistema de gestión de paquetes ad hoc, con su propio formato de paquete ligero :) sugerencia
de megamic parece un buen uso de los submódulos git para mí.Solo tratamos de hacer un seguimiento de un conjunto aquí en lugar de un gráfico, y un conjunto encaja fácilmente en un árbol. Un árbol de un nivel de profundidad es esencialmente un nodo padre y un Conjunto de nodos secundarios.
Como ha señalado, eso no resuelve por completo el problema planteado en su pregunta. Podemos dividir dos tipos distintos de información de "esto funciona con eso" en la que probablemente estamos interesados: 1. Una declaración de una versión de un proyecto (presumiblemente del autor del proyecto) que dice "Necesito la versión X del proyecto Y" 2. Una declaración utilizada por su propia configuración de compilación diciendo "He probado con éxito todo nuestro sistema usando este conjunto de versiones de proyecto"
respuesta de megamic resuelto (2) pero para (1) todavía queremos proyectos que nos digan cuáles son sus dependencias Entonces podemos usar la información de (1) para calcular los conjuntos de versiones que terminaremos registrando como (2). Este es un problema bastante complejo para garantizar su propia herramienta, que nos devuelve a los sistemas de administración de paquetes :)
Por lo que sé, la mayoría de las buenas herramientas de administración de paquetes están hechas para usuarios de un idioma o sistema operativo específico . Ver Bundler para paquetes de 'gemas' en el mundo de ruby y apto para paquetes '.deb' en el mundo de Debian.
Si alguien sabe de una buena solución de lenguaje neutro, OS-neutro a esto que se adapta bien a 'políglota' (http://blog.heroku.com/archives/2011/8/3/polyglot_platform/) la programación de proyectos, estaría muy interesado! Debería publicar eso como una pregunta.
Super es un proyecto en sí mismo. No asuma que no tiene contenido solo porque lo llamé Super. –
Pero quiero que cada proyecto sea independiente. Y me gusta que los submódulos de git se fijen a una confirmación particular en lugar de seguirlos como svn externos, por lo que un cambio en el núcleo no rompería inmediatamente A, B y Súper. –
Si rastreas ramas o comprometes SHA es completamente tu decisión. Pero la mejor respuesta para su problema es que no es posible tener tanto la opción de proyecto independiente como la de super proyecto. En la práctica, me pareció que tener un superproyecto para cada subproyecto no es tan importante. –