Cambiar de Mercurial a GIT en Atlassian Bitbucket con guardar archivos en cirílico

Antecedentes


En el verano, se publicó una publicación de blog oficial en el blog oficial de BitBucket anunciando el fin del soporte para los repositorios de Mercurial.

La interrupción de Mercurial tendrá lugar en dos etapas:

  1. A partir del 1 de febrero de 2020, los usuarios ya no podrán crear nuevos repositorios.
  2. A partir del 1 de junio de 2020, los usuarios no podrán usar las funciones de Mercurial en Bitbucket ni a través de su API, y se eliminarán todos los repositorios de Mercurial.

Las razones de esta decisión son más o menos claras, pero en mi trabajo utilizo varios repositorios en Mercurial (siempre me gustó más Mercurial, pero dejaré esta pregunta fuera del alcance de este artículo), que necesitaba convertir a GIT.

En realidad, este lugar comenzó ...

El problema


Los desarrolladores y el servicio de soporte de BitBucket ofrecieron varias opciones para tal conversión, las probé todas y al mismo tiempo probé herramientas de terceros, como importar repositorios en GitHub.

Resultó que todas estas herramientas estropean los nombres de archivos y directorios que contienen caracteres en el alfabeto cirílico, y tengo muchos de esos archivos (TK, especificaciones y otros archivos similares). Es curioso que los comentarios que contienen cirílico sean bien tolerados y se muestren después de la migración.

Encontré información en Internet de que hay herramientas en Mercurial (claves en el archivo de configuración del repositorio) que le permiten controlar la codificación de caracteres predeterminada, pero en primer lugar, se incluyen solo explícitamente y, en segundo lugar, no hay ninguna herramienta para convertir el repositorio existente . Bueno, no verifiqué cómo esta opción ayuda con la migración utilizando herramientas listas para usar: es demasiado tarde para que yo vaya por este camino.

No deseaba buscar manualmente los archivos problemáticos y realizar una recarga manual, así que tuve que cavar un poco y encontrar una solución.

Quizás, transferir un repositorio con caracteres rusos en los nombres de los archivos también es relevante para alguien, y mi artículo ahorrará un poco de tiempo.

Solución


Procedimiento básico


  1. Tome el repositorio git@github.com: seewindcn / tortoisehg.git: tiene el complemento fixutf8, que no está en la distribución principal. Se supone además que la copia local se ubicará en el directorio D: \ Development \ tortoisehg
  2. Haga una copia de su repositorio Mercurial para no dañar la ubicación principal. Además, todos los comandos se ejecutan en el directorio de copia.
  3. Corrija los nombres de archivo y directorio con el comando D: \ Development \ tortoisehg \ hg.exe addremove -s 100
  4. Comprometerse con el repositorio D: \ Development \ tortoisehg \ hg.exe commit -m "Reparar nombres de archivos"
  5. Active el complemento hggit: en el archivo .hg \ hgrc debe agregar
    [extensiones]
    hggit =
  6. Preparándose para convertir a GIT: cree una etiqueta maestra con el comando D: \ Development \ tortoisehg \ hg.exe marcador -r maestro predeterminado
  7. Crear un repositorio GIT en BitBucket
  8. Nos comprometemos con el repositorio hg push git + ssh: //git@bitbucket.org: <user> / <reponame> .git ( nota , esto usa hg regular porque el clon de seewindcn no quiere funcionar en SSH)
  9. Verificamos en el sitio web de BitBucket, asegúrese de que los nombres de los archivos cirílicos no se rompan
  10. Clonamos el repositorio GIT para nosotros mismos, verificamos los nombres de los archivos, realizamos una comparación de bytes de todos los archivos, compilamos el proyecto, realizamos pruebas
  11. Después de la compilación, probablemente habrá una tonelada de archivos nuevos que GIT sugerirá que se confirmen. El archivo .hgignore tendrá que convertirse a .gitignore a mano. Afortunadamente, puede hacer esto una vez y usar un archivo para todos los demás repositorios.

Como resultado, logramos transferir la rama predeterminada principal del repositorio Mercurial original con todo el historial de confirmaciones al maestro del repositorio GIT e incluso con etiquetas. De los inconvenientes, observo solo la falta total de información sobre los cambios en los archivos con el alfabeto cirílico en la historia de los commits: hay commits, y ni siquiera hay referencias a archivos con el alfabeto cirílico (el resto de los archivos, por supuesto, están en perfecto orden).

En general, la tarea podría considerarse completada, pero por interés deportivo, también fue interesante para mí transferir las ramas restantes.

Branch wrap excepto por defecto


  1. Obtenga una lista de sucursales hg sucursales
  2. Para cada rama
    1. Cambie a hg up <branchname> branch
    2. Cree una etiqueta (el nombre de la etiqueta no debe coincidir con el nombre de la rama): hg bookmark -r <hgbranchname> <gitbranchname>
    3. Vierta la rama en GIT hg push git@bitbucket.org: <user> / <reponame> .git

Puede suceder que el nombre de la rama también contenga el alfabeto cirílico, en este caso las ramas hg mostrarán krakozyabry. En este caso, utilicé un banco de trabajo visual hg, cambié a una rama y creé una etiqueta allí.

En este punto llega el Feng Shui completo.

En caso de que alguien esté interesado en cavar más profundo, entonces me voy ...

Lista de referencias


Source: https://habr.com/ru/post/483454/


All Articles