Git: cómo evitar el compromiso repetitivo con sub-sub-sub … ¿Git -repos?

Tengo muchos subtypes, es decir, un gran repository paraguas que tiene repositorys más pequeños. Ahora cuando realizo una confirmación en un repository de hojas, automáticamente significará que obtengo un cambio en sus padres. Si supone que la estructura es un tree binary, puede darse count de que es ridículo: tener 5 git-repo estructura profunda podría significar fácilmente $ git commit -m 'did 1'; cd ..; git commit -m 'did 1 as mentioned'; ... git commit -m 'did 1 same as earlier' $ git commit -m 'did 1'; cd ..; git commit -m 'did 1 as mentioned'; ... git commit -m 'did 1 same as earlier' $ git commit -m 'did 1'; cd ..; git commit -m 'did 1 as mentioned'; ... git commit -m 'did 1 same as earlier' . ¿Cómo puedo evitar este tipo de compromiso repetitivo?

Ejemplo 1: un ejemplo gráfico sobre el problema

 X---------| | Y---------A --------| | B --------|<-----Pictures (graphic designers, animators--have repo) | C --------| 

Un cambio en Imágenes cambiará A, B, C, X e Y – Compromiso inflado, 6 confirmaciones debido a un cambio, ¡mala repetición! Ahora las personas que trabajan con Pictures pueden ser personas totalmente diferentes a personas que hacen cosas con X, Y, A, B y C, lo que hace que las cosas sean más oscuras.

Ejemplo 2: mano-en-ejemplo para probar con sub-sub … -repos

Por favor, copie este ejemplo de mano aquí . Puede probar las cosas allí con sub-repos de 3 niveles.

Hasta ahora Sugerido

  1. Los submodules básicos en Git, más aquí .

  2. Gitslave aquí .

No crees repositorys dentro de los repositorys. Eso evitará compromisos repetitivos. Probablemente también resolverá otros problemas.

Si realmente crees que tienes una necesidad de repositorys dentro de repositorys entonces usa submodules.

Es posible que su layout o estructura sea pobre, tal vez la premisa detrás del command de GoZoner "Don't create repositories within repositories." , pero también es posible que su proyecto haya llegado a un punto que requiera herramientas más potentes. Hay momentos en que los submodules básicos no son suficientes y sus repositorys demasiado amplios, entonces probablemente debería mirar: ¡GitSlave! Es una herramienta de flujo de trabajo en la que especificas tu superrepo y luego los repos esclavos. En lugar de un compromiso repetitivo, usas el manual de gits -command aquí .

Temas relacionados

  • Git: ¿una herramienta para gestionar y estructurar proyectos?

  • ¿No estás seguro si deberías usar Gitslave? Lea una pequeña introducción aquí con un tutorial.

¿Los files en sus repositorys a menudo vienen con cambios asociados con otros files en otros repositorys? Si es así, múltiples repositorys no son tus amigos. Solo debe usar múltiples repositorys cuando son completamente (o casi completamente) independientes entre sí.

Por otro lado, si son completamente independientes, entonces puedes usar repositorys separados. Luego, para build algún tipo de proyecto maestro que pueda usar files de cada repository (es decir, depende de los otros repositorys), entonces usa un submodule.

Un repository que es un submodule de otro repository significa que depende de ese submodule. Los enlaces de dependencia entre submodules probablemente sean una mala idea si la API no es estable, pero si la API es estable, por lo que los cambios en uno no afectarán directamente al otro (es decir, no es necesario cambiar el código), dos submodules de nivel superior pueden dependen el uno del otro.

Ahora, he estado hablando de submodules todo el time, pero existe una alternativa llamada "subtree" si quieres verificar eso para ver lo que prefieres. Está en la sección contrib / del repository principal de git, por lo que no está instalado por defecto. También existe la estrategia de subtree (capítulo ProGit vinculado a en un comentario)