Cómo mantener un clon superficial de un conjunto de ramas en git

1 minuto de lectura

Me gustaría mantener un clon superficial, reflejado y desnudo de varias ramas. Clonaré localmente a partir de eso para diferentes ramas del proyecto. p.ej

+------------------------------------------------------------------+
| repo1: server1:original-repo.git branches: A, B, C, D, E         |
+------------------------------------------------------------------+
  ↓
+------------------------------------------------------------------+
| repo2: server2:shallow-bare-selective-clone branches: A, B only  |
+------------------------------------------------------------------+
  ↓                                 ↓
+-------------------------------+ +--------------------------------+
| repo3: server2:clone repo2, A | | repo4: server2:clone repo2, B  |
+-------------------------------+ +--------------------------------+

Entonces puedo hacer repo2 como este

git clone --bare --mirror --depth 1 server1:repo1  repo2
cd repo2
git fetch --depth 200 origin A
git fetch --depth 200 origin B

Y luego creo que repo3 y 4 son realmente fáciles: pueden clonar todo lo que quieran de repo2, estarán limitados por la superficialidad de repo2.

Pero mantener repo2 actualizado desde repo1 mientras mantengo su superficialidad es en lo que estoy atascado (idealmente me gustaría mantener todo desde cierto compromiso, pero entiendo que eso no es posible). Parece que tengo que hacer los múltiples comandos de búsqueda de git cada vez, ¿es así? ¿Hay alguna manera de incluir eso en el archivo de configuración para que pueda hacer git fetch y sabe lo que quiero decir?

  • Relacionado stackoverflow.com/questions/19352894, stackoverflow.com/questions/28645657

    – tkruse

    1 de abril de 2020 a las 15:38

Enfrenté esta pregunta cuando buscaba necesidades Git sofisticadas análogas y entiendo perfectamente que la pregunta tiene 2 años. Estoy respondiendo porque no hay respuestas en absoluto, mientras que la pregunta sigue siendo muy válida.

La superficialidad es principalmente fetch propiedad. Entonces es posible hacer fetch con --depth 200 y mantener el historial sin confirmaciones demasiado antiguas.

Las versiones modernas de Git tienen --shallow-exclude opción. Creo que es exactamente lo que permite “mantener todo desde cierto compromiso”.

  • Opción --shallow-since también podría ser útil para algunos casos de uso similares.

    – tkruse

    1 de abril de 2020 a las 15:28

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad