tag - qué tipos de etiquetas existen en git
¿Alguien realmente está usando git super/subprojects? (3)
¿Alguien está utilizando la nueva función git super / subproject en proyectos reales? ¿Qué tan bien funciona? Por ejemplo, entiendo que si presento un subproyecto, debo llamar manualmente a los enganches de superproyectos (tal vez utilizando el enganche de subproyectos, pero sin embargo).
FWIW, estamos tratando de dar el salto a git, y nuestro proyecto ( bitweaver , un sistema de gestión de contenido) es un sistema altamente modular, con casi 160 repositorios ). Una "compilación" generalmente contiene dos docenas o más de sub-repositorios. Usamos ''módulos virtuales'' en CVS, y esto funcionó fantásticamente para nosotros, sin embargo, CVS tiene sus propias limitaciones para los cometidos de preparación.
Los submódulos de Git tienen algunas limitaciones graves, y definitivamente debería evaluar la implementación de mercurial, ya que es ciertamente más amigable y flexible para proyectos externos / modulares (es decir, es compatible con otros sistemas VCS, incluso HgGit).
Aquí están los mayores desafíos:
Cada submódulo está fuertemente vinculado a un compromiso en particular cuando "git submodule add" en el super-repositorio. Esto es por diseño y se busca como un beneficio para los mantenedores de git, por lo que no espero que cambie en el futuro. Esto es doloroso en un sistema como el nuestro donde los comités siempre ocurren en los submódulos. Debe actualizar el superproyecto para mantenerse actualizado o actualizar sus subposiciones para dominar después de la actualización inicial del submódulo. (ver supergit abajo para nuestra solución).
No puedes comprometer fácilmente y empujar a todos los sub-repos desde la raíz. Esto también es muy molesto, ver supergit a continuación.
Varios gotchas que pueden ser insoportables, especialmente las cosas que "sobrescriben los cambios en silencio".
supergit
Hemos escrito un supergit de llamada shell script que maneja parte del dolor. Realiza el clon, el inicio del submódulo, la actualización y el registro de salida, todo en un solo golpe. También ejecutará comandos git a todos los directorios en el super-repo individualmente (procesamiento masivo de git de clases).
HTH, buena suerte.
Si te refieres a los submódulos, entonces ciertamente.
Los submódulos no saben y no deberían saber en qué lugar se usan. Por ejemplo, tengo un submódulo que se usa en varios proyectos que conozco (y posiblemente varios que no).
Presionar un submódulo no afecta de ninguna manera la versión del código utilizado por el proyecto que contiene el submódulo, por lo que no estoy seguro de qué es lo que querría hacer un gancho.
Al utilizar el submódulo, está definiendo en su espacio de trabajo Git (es decir, su repositorio Git de "súper proyecto") una configuración .
Por "configuración", me refiero a "la lista de etiquetas o el nodo SHA-1 necesario para trabajar en su área de trabajo".
(y por trabajo, me refiero a cualquier "esfuerzo de desarrollo" que esté haciendo dentro de su área de trabajo: compilación clásica, o parche, o combinación, o implementación, o ...).
Ese es el caso cuando está clonando un superproyecto y " git update
" sus submódulos: está comprobando los repositorios exactos SHA1 que se confirmaron previamente en el superproyecto (registrados como gitlink en el índice ).
El otro modo es cuando está trabajando en su superproyecto y en uno o más submódulos.
Eso significa que, para un submódulo dado, ha comprobado una rama específica (ya no está utilizando una CABEZA separada para el contenido de esos submódulos, sino un puntero a la punta de una rama).
Luego, "empujar un submódulo" significa actualizar un repositorio distante que contiene ese submódulo (y solo ese).
El truco real en ese último escenario (que podría merecer un gancho de lo que usted quiere) es cuando presiona el superproyecto: debe asegurarse de haber presionado todos los submódulos primero.
Desde el tutorial del submódulo :
Siempre publique el cambio de submódulo antes de publicar el cambio en el superproyecto que lo referencia. Si olvida publicar el cambio de submódulo, otros no podrán clonar el repositorio (del superproyecto)
No olvides que puedes configurar un submódulo para seguir una rama .