practices - Convertir git repositorio de codificación de archivos
git tag commits (1)
Tengo un gran repositorio de CVS que contiene archivos en ISO-8859-1
y quiero convertirlo a git.
Claro que puedo configurar git para usar ISO-8859-1
para la codificación, pero me gustaría tenerlo en utf8
.
Ahora, con herramientas como iconv
o recode
, puedo convertir la codificación de los archivos en mi árbol de trabajo. Podría cometer esto con un mensaje como converted encoding
.
Mi pregunta ahora es, ¿existe la posibilidad de convertir la historia completa? Ya sea al convertir de cvs a git o después. Mi idea sería escribir un script que lea cada confirmación en el repositorio de git y convertirlo a utf8
y utf8
a un nuevo repositorio de git.
¿Es esto posible? (No estoy seguro acerca de los códigos hash y de cómo recorrer las confirmaciones, ramas y etiquetas). ¿O hay una herramienta que puede manejar algo como esto?
Puedes hacer esto con git filter-branch
. La idea es que tenga que cambiar la codificación de los archivos en cada confirmación, reescribiendo cada confirmación a medida que avanza.
Primero, escriba un script que cambie la codificación de cada archivo en el repositorio. Podría verse así:
#!/bin/sh
find . -type f -print | while read f; do
mv -i "$f" "$f.recode.$$"
iconv -f iso-8859-1 -t utf-8 < "$f.recode.$$" > "$f"
rm -f "$f.recode.$$"
done
Luego use git filter-branch
para ejecutar este script una y otra vez, una vez por confirmación:
git filter-branch --tree-filter /tmp/recode-all-files HEAD
donde /tmp/recode-all-files
es el script anterior.
Inmediatamente después de que el repositorio se actualice recientemente desde CVS, probablemente tenga solo una rama en git con un historial lineal desde el principio. Si tiene varias sucursales, es posible que deba mejorar el comando git filter-branch
para editar todas las confirmaciones.