2011-01-09 9 views
5

Tengo problemas con el siguiente problema. Cuando sigo ir a buscar las revisiones de SVN congit-svn no puede crear una rama para seguir la ramificación de SVN

git svn fetch 

Estoy recibiendo el siguiente error:

Found possible branch point: https://somecompany.com/product/trunk 
=> https://somecompany.com/product/branches/deep/branches/product-001, 72666 
Found branch parent: (refs/remotes/deep/branches/product-001) b685b7b92813885fdf 6b8e2663daf884bf504b14 
Following parent with do_switch 
Successfully followed parent 
error: 'refs/remotes/deep' exists; cannot create 'refs/remotes/deep/branches/product-001' 
fatal: Cannot lock the ref 'refs/remotes/deep/branches/product-001'. 
update-ref -m r72667 refs/remotes/deep/branches/product-001 df51920e8f0a53f26507 c2679eb6a9dbad91e0d6: command returned error: 128 

Esto sucedió porque estaba retracto revisiones usando el filtro predeterminado para las ramas de SVN:

[svn-remote "svn"] 
    url = https://somecompany.com/someproduct 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 

Ahora, tengo agregada la siguiente línea, pero es demasiado tarde:

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

He intentado solucionar esto usando git svn reset para eliminar todas las confirmaciones. De hecho, puedo ver en el mensaje de error que git está intentando lo correcto, pero no puede debido a la existencia de controles remotos/existencia profunda.

He intentado buscar 2 posibles soluciones: 1. Quite esa rama (remotos/profundos), pero como git la rastrea como control remoto, no pude encontrar ninguna solución para eso. 2. Elimine todo el historial relacionado con esa rama. Sin demasiado éxito :(

¿Alguien sabe cómo lidiar con mi problema

Respuesta

4

he sido finalmente capaz de solucionar el problema realizando los siguientes pasos: 2?

  1. Extracción refs/mandos a distancia/profundidad de
  2. Extracción .git/logs/refs/mandos a distancia/profundidad

Pero todavía tienen el problema con ir a buscar-envasados ​​refs. necesito utilizar

branches = branches/*:refs/remotes/* 

para las ramas normales y

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

para las ramas profundas. Lamentablemente, la especificación anterior incluye la última, por lo que aparece el error "fatal: no se pueden bloquear los refs/remotes/deep" de la ref. Ya que git-svn intenta crear una rama profunda de acuerdo con la primera especificación.

Hasta ahora, lo hago comentando manualmente las primeras "ramas" y obteniendo revisiones específicas con ramas profundas, pero esta no es una buena opción ya que hay demasiadas revisiones para buscar en ambos casos.

UPD: He encontrado la solución simple pero no elegante para el problema restante. Estoy usando ramas para especificar rutas a las ramas profundas y buscar para especificar cada rama del primer nivel.

+0

respecto 1. Eliminación de refs/mandos a distancia/profundidad de empacado árbitros 2. Extracción .git/logs/refs/mandos a distancia/profundidad podría explicar cómo hacerlo? – ryenus

+0

por rm o del dependiendo del SO que esté usando –

1

Tuve un problema muy similar, y encontré que "git svn reset", no "git reset" lo solucionó. Si no actualiza la configuración de sus sucursales de antemano, una vez que recupera una confirmación que pasa un punto de bifurcación, debe hacer una copia de seguridad para recuperarlas nuevamente. De lo contrario, están colgando sin padre.

Así, actualizar sus ramas como antes, a continuación, ejecutar

git svn reset -r<revisionnum> 

y seguir con su svn git alcanzar un precio normal. Esto me ahorró muchas horas de reconstrucción de SVN.

En su caso, probablemente también necesite investigar las características de "ignorar" para no rastrear su rama incrustada.

+0

En realidad, escribí equivocadamente git reset cuando quise decir git svn reset –

Cuestiones relacionadas