Tenemos un repositorio Mercurial muy grande: aproximadamente 11 GB con aproximadamente 130,000 confirmaciones. Estoy tratando de convertirlo a git usando la extensión hggit de Mercurial, y estoy teniendo una experiencia extraña.

Como nota al margen, estoy haciendo esto en Windows 10

Primero, creo un directorio vacío y llamo a git init para inicializar el repositorio git.

Luego, voy al directorio hg y emito el comando (inusual para mí) hg bookmark hg según algunos artículos que leí.

Luego, emito hg push c:\path\to\repo

Aquí está el resultado:

enter image description here

Parece que el repositorio se procesó y envió con éxito.

Sin embargo, cuando voy al directorio del repositorio de git, está vacío, excepto el directorio .git. En ese directorio git, todas las etiquetas están presentes, y hay un gran archivo * .pack de aproximadamente 11 GB, que supongo que está relacionado con nuestro repositorio, dado el tamaño.

Pensé que necesitaba checkout una rama antes de que aparecieran los archivos, pero un intento de pagar una rama reciente da como resultado:

error: pathspec 'rio' did not match any file(s) known to git.

Entonces mi pregunta es: ¿Qué debo hacer para que mis archivos aparezcan en el repositorio de git?

0
Nick Hodges 11 dic. 2019 a las 16:50

2 respuestas

La mejor respuesta

Ejecute git tag --list y git branch --list para ver los nombres reales de las referencias creadas por su comando hg push.

Luego puede pagar la rama o etiqueta apropiada.


Si desea crear una rama con un nombre más explícito, ejecute el comando regular:

git checkout -b new_branch_name [hash or tag or branch]

Por ejemplo: si desea crear una rama master comenzando desde el mismo punto que la rama llamada hg:

git checkout -b master hg

(siguiendo el enlace publicado en el comentario de @torek): Léame de hg-git, "Uso" sección

Hg-Git empuja sus marcadores hacia el servidor Git como ramas y tirará de las ramas Git hacia abajo y las configurará como marcadores.

Si desea crear más ramas a partir de puntos específicos en su repositorio mercurial, deberá marcarlas.


Detalles adicionales sobre sucursales:

No estoy acostumbrado a Mercurial, pero por lo que he reunido, las ramas en Mercurial son objetos que tienen atributos distintos (como: ¿cuándo fue creado? ¿Por quién? Etc ...),
a diferencia de git, donde las ramas son solo referencias superficiales a commits, que pueden actualizarse automáticamente (por ejemplo: con git commit, git merge, etc.).

Por ejemplo: en git, con el siguiente diagrama:

a--*--*--x--*--*--*--*--*--* <- develop
          \
           *--*--* <- feature1

Puede encontrar información sobre cada confirmación individual (cada * en el diagrama): quién lo creó, cuándo se cometió, etc ...
pero no puede decir con certeza si develop comenzó en a y feature1 comenzó en x, o si fue al revés.

El documento para hg-git establece, en su "branch_bookmark_suffix", que esta es la razón por la cual hg-git asigna git sucursales a hg marcadores, y que debe duplicar sus sucursales con marcadores. Vea el ejemplo que publiqué como otra respuesta a esta pregunta.

2
LeGEC 17 dic. 2019 a las 08:06

Respuesta a: ¿cómo empujar la rama 7.3.20 de mercurial a git?

preámbulo : el branch_bookmark_suffix sufijo párrafo de hg git's README indica los pasos a seguir

  1. elige un sufijo para tus marcadores mercuriales (usaré _git):

    # edit hg config, in the [git] section, add :
    [git]
    branch_bookmark_suffix = _git
    
  2. en su repositorio mercurial, cree un marcador que duplique la rama:

    hg bookmark 7.3.20_git 7.3.20
    
  3. use hggit para ir al repositorio git:

    hg push
    
  4. en su repositorio de git, verifique si se ha creado una rama 7.3.20:

    git branch --list
    

Debería repetir el paso 2. para todas las ramas que desea empujar a git.

1
LeGEC 13 dic. 2019 a las 16:32