2012-07-27 9 views
13

Intentando migrar un repositorio svn grande pero lineal a git. El repositorio svn no tiene el diseño estándar (troncal, ramas, etiquetas) ... solo un directorio con el tronco.git-svn migration fatal: no es válido SHA1 update-ref refs/heads/master refs/remotes/trunk: comando devuelto error: 128

Ubuntu 12.4 LTS, git 1.7.9.5.

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel/COAWST --authors-file=../users.txt COAWST 

... 

    D WPS/metgrid/storage_module.F 
    D WPS/metgrid/process_domain_module.F 
W: -empty_dir: WPS/metgrid/gridinfo_module.F 
W: -empty_dir: WPS/metgrid/input_module.F 
W: -empty_dir: WPS/metgrid/interp_option_module.F 
W: -empty_dir: WPS/metgrid/module_date_pack.F 
W: -empty_dir: WPS/metgrid/process_domain_module.F 
W: -empty_dir: WPS/metgrid/storage_module.F 
r635 = c19181c9718e701788b540ed0cc559e4fbddf413 (refs/remotes/git-svn) 
    M Tools/Docs/COAWST_User_Manual.doc 
r636 = 1b7849c3e5a20856c9ddb909a5f53ddf8501ad33 (refs/remotes/git-svn) 
Auto packing the repository for optimum performance. You may also 
run "git gc" manually. See "git help gc" for more information. 
Counting objects: 14143, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (14039/14039), done. 
Writing objects: 100% (14143/14143), done. 
Total 14143 (delta 8350), reused 0 (delta 0) 
fatal: refs/remotes/trunk: not a valid SHA1 
update-ref refs/heads/master refs/remotes/trunk: command returned error: 128 

He tratado con combinaciones de variantes -s -t, Abre COAWST, -t, --preserve-empty-directorios (que me gustaría hacer), --no-meta-datos (por Pro Git) ... siempre el mismo error final.

¡Gracias por cualquier sugerencia!

+1

Un directorio con el tronco sigue siendo el diseño estándar. ¿Tiene acceso al servidor con el repositorio SVN? –

+0

Sí. Para aclarar, no hay nada en el svn repo llamado "trunk" –

+0

Pero, ¿hay algún directorio que desempeñe el papel de trunk (puede llamarse "Trunk" o "Project" o COASWST o lo que sea, quiero decir: ¿te gustaría que Git se comprometa a contener solo los contenidos de ese directorio o contener ese directorio también) o todos los datos se concentran en la raíz del repositorio SVN? Y otra pregunta: ¿es cierto que su repositorio SVN contiene 636 revisiones (es la última revisión que puedo ver en la salida)? –

Respuesta

9

Creo que ejecuta el comando correcto. Alternativamente, puede ejecutar

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel --trunk=COAWST --authors-file=../users.txt COAWST 

git-svn casi termina su trabajo en cada caso. Lo único que intenta hacer es configurar 'maestro' para que apunte a tu troncal. Debido a algunos errores que trata de ponerlo en el valor incorrecto, pero se puede realizar de forma manual con

$ git update-ref refs/heads/master refs/remotes/git-svn 

Si usted todavía tiene problemas que puede tratar de convertir el repositorio con SubGit en 3 pasos:

$ subgit configure path/to/svn/repository 
#edit path/to/svn/repository/conf/subgit.conf to set trunk = COAWST:refs/heads/master and authorsFile = path/to/users.txt 
$ subgit install path/to/svn/repository 

El repositorio convertido estará en ruta/a/svn/repositorio/conf/.git

+1

Tuve el mismo problema, y ​​al hacer una importación única de SubGit hice el trabajo por mí: http://subgit.com/book-remote/index.html#import –

+0

Tuve el mismo error, ejecuté el comando con éxito. Pero realmente no conozco una forma clara de cómo comprobar si funcionó. – lvthillo

1

Tuve el mismo problema hoy.

El problema es probablemente que el repositorio SVN no tenga un directorio troncal. El tronco estándar, las etiquetas y los directorios de ramas parecen ser opcionales en SVN. Pero git-svn necesita saber esto al migrar.

También es posible que algunos de los directorios estén allí pero tengan un nombre diferente. (Por ejemplo el tronco podría ser llamado "proyecto" en lugar de "tronco", ramas podrían denominarse "ramas" como de costumbre y etiquetas podrían estar ausentes. O "tronco" podría ser nombrado "tronco".)

  • Si no hay ninguno de estos directorios estándar en el repositorio SVN, y todo se coloca en la raíz del repositorio, la solución es simplemente para no intentar clonar los directorios svn estándar. Simplemente clonar la raíz.

  • Si existen (o algunos lo hacen), pero con diferentes nombres, git-svn tiene que ser informado acerca de estos nombres.

I utilizarse tortuga Git migrar de SVN para Git. En TortoiseGit, se realiza clonando desde el repositorio svn (¡sí!) Y marcando la casilla de verificación "Desde el repositorio SVN".

  • Si no hay tronco, las etiquetas o las ramas de directorios en el repositorio SVN, simplemente desactive la "etiquetas" y la sección del clon "ramas" casillas de la "Desde repositorio SVN" "tronco" diálogo.

  • Si los directorios estándar están ahí, pero se nombran de manera diferente a normal, manténgalas marcadas pero escriba los nombres usados ​​en el cuadro de texto junto a ellas.

    (desde la línea de comandos se puede hacer esto con el t, -T y conmutadores -b. Ver http://www.sailmaker.co.uk/blog/2013/05/05/migrating-from-svn-to-git-preserving-branches-and-tags-3/ en "diseño SVN no estándar").

(Esos eran los dos casos me encontré -.. Pueden existir casos más complejos que tenía varios repositorios SVN con ni tronco, las etiquetas o las ramas de directorios y desmarcando estos 3 casillas de verificación hizo trabajar también tuve un caso en el directorio troncal se llamaba "proyecto" en lugar de "tronco", pero el directorio ramas se llamaba normalmente y no había etiquetas. Desmarque la casilla de verificación etiquetas e ingrese el nombre del directorio troncal que funcionó ese caso.)

8

Cada vez que esto me pasaba, Git simplemente no podía recuperar una confirmación de trunk en Subversion:

fatal: refs/remotes/trunk: not a valid SHA1 

Razones:

  • No ha especificado el diseño de Subversion cuando no era estándar (tronco-tags-ramas). Específicamente por el error: no tiene /trunk.
  • No ha obtenido una revisión lo suficientemente antigua como para abarcar al menos una confirmación en el troncal (por ejemplo, usando la opción -r).
  • Combinación de las anteriores.
+2

+1: Intenté buscar con la opción '-r' y ocurrió el error. Cuando revisé todas las revisiones, el problema desapareció. – pesche

Cuestiones relacionadas