Filtro de subdirectorio Git con etiquetas

2 minutos de lectura

avatar de usuario
dennis

Estoy intentando dividir un repositorio grande en varios más pequeños. El objetivo es dividir una carpeta y conservar las etiquetas en el proceso.

Yo he tratado:

git filter-branch --prune-empty --subdirectory-filter my-folder develop

Este lugar correctamente my-folder en la raíz del nuevo proyecto y retuvo las etiquetas. Sin embargo, revisar una etiqueta resultó en ver toda la estructura de directorios anterior dentro del nuevo repositorio.

Así que probé:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --branches=develop --tags

Esto da como resultado que la rama de desarrollo esté allí con la estructura de directorios anterior, PERO cuando pago una etiqueta, ¡veo el subdirectorio correctamente filtrado a la raíz! Entonces las etiquetas son correctas pero no la rama de desarrollo. Básicamente tiene el problema opuesto al primer método.

No sé por qué el segundo método no funcionó. ¡Realmente agradecería cualquier sugerencia!

EDITAR:

Intentando esto ahora:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --all

Tenía dudas, ya que espero que esto tome un poco más de tiempo. Esto tomó más tiempo, pero en su mayoría funcionó. ¿Lo que no funcionó? Bueno, las etiquetas más antiguas en las que aún no se había creado la carpeta se dejaron en el repositorio y, cuando se desprotegieron, contenían la estructura de directorios completa (muy) antigua. Tuve que grep y eliminar todas estas etiquetas. Aún así, el repositorio no es tan pequeño como esperaba…

avatar de usuario
VonC

Como mencioné en “Comandos de Git que podrían romper/reescribir el historial”, el antiguo comando git filter-branch está quedando obsoleto lentamente.

usando el nuevo git filter-repoeso sería:

 git filter-repo --path my-folder/ --to-subdirectory-filter / -- refs develop

Luego empuje esa rama a un nuevo repositorio Git vacío.

Eso debería mover las etiquetas relevantes correctamente.

  • Lo intentaré en este momento.

    -Dennis

    21 de octubre de 2019 a las 8:37

  • Solo puedo acceder a 2.22.0. Sabes si funciona con esa versión?

    -Dennis

    23 de octubre de 2019 a las 9:31

  • De hecho, funciona con 2.22.0, pero tengo un error relacionado con Python que no puede procesar cadenas que no sean Unicode (o algo por el estilo). Estoy en un entorno relativamente restrictivo y, lamentablemente, no puedo iniciar una imagen de Linux para resolver esto por mí mismo. Esto está en una instalación de git-for-windows

    -Dennis

    17 dic 2019 a las 22:36


  • @Dennis Está bien. Nota: para Git para Windows, puede instalar cualquier versión que desee (no se requiere privilegio de elevación). Sin embargo, Git 2.24 tiene un error: stackoverflow.com/a/59383810/6309

    – VoC

    18 de diciembre de 2019 a las 6:49

  • Voy a aceptar la tuya como la respuesta en esta etapa. Parece que tendría que conseguir 2.23 (¡gracias por señalar ese error!), así como otra versión de filter-repo. Lo intentaré de nuevo.

    -Dennis

    18 de diciembre de 2019 a las 10:36

¿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