2011-01-17 12 views
8

Estoy tratando de sacar un repositorio de subversión completa, incluyendo todas las ramas y etiquetas:Comprobación de errores a cabo repositorio de Subversion (SVN: Su directorio .svn/tmp puede ser falta o está dañado;)

svn co svn+ssh://path/to/project 

Esto tiene una duración de desde hace tiempo, pero durante el pago y envío de una rama me sale el siguiente error:

svn: Your .svn/tmp directory may be missing or corrupt; run 'svn cleanup' and try again 
svn: Can't open file 'project\branches\BRANCH\source\java\com\bS\.svn\tmp\text-base\Event.java.svn-base': The system cannot find the path specified. 

así que traté de pago y envío la rama manualmente haciendo:

svn co svn+ssh://path/to/project/branches/BRANCH 

Esto ejecuta multas y obtengo la sucursal. Luego puedo copiar la rama en el directorio de ramas del proyecto completo y continuar con el proceso de pago. Pero sigue encontrándose con este problema en otras ramas.

¿Alguien tiene alguna idea de por qué no puedo pagar la cuenta como parte del proyecto en general, pero puedo verificarlo solo?

+0

¿Intentaste ejecutar svn cleanup? –

+0

Sí, no ayudó. – DaveJohnston

+0

observación que probablemente no esté relacionada con el error: a menos que sepa lo que está haciendo (es decir, si sabe cómo crear revisiones superficiales), no debería verificar el nivel superior de un proyecto con todas las ramas y etiquetas incluidas. Si el proyecto tiene miles de etiquetas, su pago contendrá mil copias del proyecto. Verifique el tronco o una rama específica en su lugar. –

Respuesta

6

Ok, así que en realidad he encontrado la respuesta a mi propia pregunta, bueno al menos la solución. Resulta que tiene que ver con la longitud de la ruta. En mi pregunta anterior, edité el nombre de ruta para no publicar detalles del código de la empresa, pero en realidad resultó ser un archivo con un nombre muy largo y vivía en un directorio bastante anidado.

Cuando estaba revisando la rama por mi cuenta, la estaba revisando en un directorio de nivel superior en mi disco duro y estaba funcionando. Traté de verificar la rama directamente en el directorio de sucursales que había creado para el proyecto y también falló, así que supongo que debe haber tenido algo que ver con la ruta.

Ahora estoy revisando todo el proyecto en D: \ ProjectDir y todo parece ir mucho mejor. Supongo que hay un límite en la subversión a la longitud de una ruta, por lo que no obtuvo algunos de los archivos necesarios.

* Actualización: el límite es de 255 caracteres. Resultó que en mi caso el camino era de 269 caracteres. Por lo tanto, basta con subir un nivel de directorio para evitar el problema.

+2

Estás en Windows. ¿Derecha? La longitud máxima de la ruta es un gran problema de Windows. He visto spamware oculto usando esto. Windows Explorer y Anti-Malware no podían ver los archivos, pero estaban allí. La ironía es que Windows PUEDE manejar estas rutas largas, y NTFS PUEDE manejar estas rutas. Sin embargo, Windows Explorer y las bibliotecas básicas de apertura/cierre de archivos no pueden. Puede hacer técnicas de programación utilizando // rutas que le permitirán evitar estos problemas, pero nadie las usa. Aún no se sabe por qué MS todavía tiene este límite falso en Windows. Especialmente desde .NET utiliza nombres de ruta larga. –

+0

No es muy útil por esa solución, ya que a veces no tienes el lujo de "subir un nivel". En su lugar, recomendaría la solución de Victor (publicada más adelante): usando la ruta absoluta en el enlace de pago, no la ruta relativa –

7

Puede solucionar este problema en Windows especificando la ruta completa en el parámetro al comando svn. Por ejemplo en lugar de

c:\dev> svn co http://repoman.example/svn/myproj/trunk myproj 

probar esto

c:\dev> svn co http://repoman.example/svn/myproj/trunk c:\dev\myproj 

Por alguna razón path length limits only apply to relative paths.

+1

Esto funcionó para mí. Lo bueno es que ya estaba en la raíz de la unidad, no había forma de acortar la ruta de pago. –

+0

TRABAJA PARA MÍ TAMBIÉN !!! Lo siento, estoy demasiado excitado –

2

Comprobar esto: find . -iname '.svn' -exec mkdir {}/tmp \;

Cuestiones relacionadas