two tortoise subversion subir proyecto hacer desvincular create carpeta branches svn escaping

svn - tortoise - ¿Cómo escapar @ caracteres en nombres de archivos administrados por Subversion?



subir proyecto a svn (11)

@David H

Acabo de probar un comando similar sin escapar de los símbolos @ y todavía funciona bien

svn ci splash.png [email protected]@

Esto está en GNU bash, versión 3.2.48 (1) -release (x86_64-apple-darwin10.0) y svn 1.6.16

Para muchas operaciones de Subversion, agregar el símbolo ''@'' al final de un archivo o argumento de URL le permite enfocar una revisión específica de ese archivo. Por ejemplo, "svn info test.txt@1234" dará información sobre test.txt tal como existía en la revisión 1234.

Sin embargo, cuando el nombre del archivo contiene un @, Subversion lo interpreta incorrectamente como un especificador de revisión:

svn info ''test @ .txt'' svn: error de sintaxis analizando revisión ''.txt''

Probé comillas dobles y simples, así como también escapé con ''/'', ''/' y ''@''. ¿Cómo puedo decirle a Subversion que trate los símbolos @ como parte del nombre del archivo?


Del libro de SVN (énfasis agregado):

El lector perceptivo probablemente se pregunte en este momento si la sintaxis de revisión de clavijas causa problemas para trabajar en las rutas de copia o URL que realmente tienen signos en ellas. Después de todo, ¿cómo sabe svn si news@11 es el nombre de un directorio en mi árbol o simplemente una sintaxis para "revisión 11 de noticias "? Afortunadamente, mientras svn siempre asumirá lo último, hay una solución trivial. Solo necesita agregar un signo al final de la ruta , como news@11@ . svn solo se preocupa por el último al iniciar sesión en el argumento, y no se considera ilegal omitir un especificador de revisión de paridad literal después de eso en el signo. Esta solución alternativa se aplica incluso a las rutas que terminan en un signo en-usted usaría filename@@ para hablar sobre un archivo llamado filename @ .


En mi caso, necesitaba eliminar archivos de un repositorio SVN que contenía un signo @:

Esto no funcionaría:

svn remove ''src/assets/images/hi_res/[email protected]''

Pero esto hizo:

svn remove ''src/assets/images/hi_res/[email protected]@''


Hoy tuve el problema con los nombres de archivo generados a partir de direcciones de correo electrónico (¡no es una buena idea!).

Solución, usando opciones de find de printf , y expansión de shell

svn add $(find . -name "*@*.png" -printf "%p@ ")


La única solución que funcionó para mí fue la misma sugerida por @NPike

svn revert ''ruta / a / nombre de archivo @ ext @''


La respuesta original es correcta, pero quizás no lo suficientemente explícita. Las opciones particulares de línea de comandos de Unix son las siguientes:

svn info ''[email protected]@''

o

svn info "[email protected]@"

o

svn info image/@2x.png/@

Acabo de probar los tres.


Para agregar múltiples archivos, hay una solución alternativa:

svn status | grep /.png | awk ''{print $2"@"}''| xargs svn add


Para los comandos svn con 2 argumentos como "mover", debe agregar "@" solo en el parámetro izquierdo (primer). Por ejemplo:

$ svn add README@txt@ A README@txt $ svn move README@txt@ README2@txt A README2@txt D README@txt $ svn status A README2@txt $ svn commit -m "blah" Adding README2@txt Transmitting file data . Committed revision 168. $ svn delete README2@txt@ D README2@txt $ svn commit -m "blahblah" *Deleting README2@txt Committed revision 169.

Esta línea es importante: $ svn move README @ txt @ README2 @ txt

Como puede ver, no necesitamos agregar "@" en "README2 @ txt"



Solución para agregar múltiples archivos en diferentes subcarpetas:

for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done

Simplemente reemplace el "png" en " @ .png" por el tipo de archivos que desea agregar.


para agregar el siguiente archivo: [email protected] haga lo siguiente: svn add image / @ 2x.png @