tag practices delete crear commits commands best git utf-8 character-encoding cvs cvs2svn

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.