Convirtiendo gran repository bzr a git, ¿qué esperar?

Estoy tratando de convertir algunos repositorys de bazares antiguos a git, y aunque todo parece ir bien, no estoy seguro de si realmente fue tan bien como decía.

Mi repository bazar está estructurado así:

  • repo
    • el maletero
    • pinchar
    • feature / feature-branchX
    • feature / feature-branchY

Estoy usando el método fast-export / fast-imports para migrar entre bzr y git.

Inicialmente, migro el "tronco", con –export-marks, así:

bzr fast-export --export-marks=../$1/marks.bzr ../$1/trunk | git fast-import --export-marks=../$1/marks.bzr --export-marks=../$1/marks.git 

Con $ 1 es el nombre del

luego itere todas las demás carpetas en el directory "repo" y llame

 bzr fast-export --marks=../$1/marks.bzr --git-branch=$nick ../$1/$b/.. | git fast-import --import-marks=../$1/marks.git --export-marks=../$1/marks.git 

con $ nick siendo el apodo de twig de bzr, y $ 1 / $ b siendo el nombre de directory de la twig.

Como dije, procesa todos los directorys esperados, pero después de la finalización, cuando hago un

 git branch 

muestra solo 20 twigs algo, donde el repository baza original tenía más de 80.

Ahora, simplemente mirando "master" en git, parece que está todo allí, y las 60 twigs que faltan podrían ser fácilmente twigs que ya están fusionadas en el tronco. Pero no estoy seguro de que las herramientas de export rápida / import rápida sean lo suficientemente inteligentes como para decir "bah, no necesitarás esto", pero tal vez sí lo estén.

¿Alguien tiene alguna experiencia con esto?

¿Se supone que me quedarán con "maestro" y cualquier twig que haya migrado sin compromiso en ellos después de migrar de bzr a git?

Finalmente, por el bien de la historia, ¿hay alguna manera de obligar a todas las twigs a convertirse, incluso si están técnicamente extintas?

Parece que las herramientas de import / export rápida son de hecho lo suficientemente astutas como para decir "bah, no lo necesitarás" . Sin embargo, no es una ciencia de cohetes, al igual que git branch -d sabe cuándo es seguro eliminar una twig, por lo que puede git fast-import saber que la twig entrante es una réplica.

Pero probablemente le gustaría estar realmente seguro , y estoy de acuerdo. Armado un script simple (si ineficiente) para encontrar la list de twigs bzr únicas:

 #!/bin/sh paths=$(bzr branches -R) for path1 in $paths; do merged= for path2 in $paths; do test $path1 = $path2 && continue # is path1 part of path2 ? if bzr missing -d $path1 $path2 --mine >/dev/null; then # is path2 part of path1 ? if bzr missing -d $path1 $path2 --other >/dev/null; then echo "# $path1 == $path2" else merged=1 break fi fi done test "$merged" || echo $path1 done 

Ejecuta esto dentro de un repository compartido de Bazar. Encuentra todas las twigs, y luego compara todas las twigs contra todas las demás. Si A está en B, entonces hay dos posibilidades: quizás B también es A, lo que significa A == B. De lo contrario, A es realmente networkingundante.

El script filtra las twigs que están completamente fusionadas en al less otra twig. Sin embargo, si hay varias twigs que son idénticas, imprime todas, con líneas adicionales que comienzan con # para indicar que son idénticas.

Sus commands de ejemplo con bzr fast-export ... | git fast-import ... bzr fast-export ... | git fast-import ... parece tener algunas opciones innecesarias. Siguiendo los ejemplos al final de bzr fast-export -h , recomiendo usar estos pasos en su lugar:

  1. Crea un nuevo repository de Git:

     git init /tmp/gitrepo 
  2. Entra en tu repository compartido de Bazaar:

     cd /path/to/bzr/shanetworking/repo 
  3. Migre su twig principal (¿troncal?) Para ser el maestro:

     bzr fast-export --export-marks=marks.bzr trunk/ | \ GIT_DIR=/tmp/gitrepo/.git/ git fast-import --export-marks=marks.git 
  4. Migrar todas las twigs:

     bzr branches -R | while read path; do nick=$(basename $path) echo migrating $nick ... bzr fast-export --import-marks=marks.bzr -b $nick $path | \ GIT_DIR=/tmp/gitrepo/.git git fast-import --import-marks=marks.git \ &>/tmp/migration.log done 

Si nota que el último paso no verifica la troncal que ya ha migrado. No importa, ya que no lo importará de nuevo de todos modos. También tenga en count que incluso si branchA se fusiona completamente en branchB , se creará en Git si se ve primero . Si branchB se ve primero, entonces branchA no se creará en Git ( "bah – no lo necesitarás" ).

No pude encontrar una forma de forzar la creación de twigs idénticas al importar a Git. No creo que sea posible.