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 , comonews@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íafilename@@
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"
Simplemente agregue
@
en el archivo que necesita usar, no importa qué comando SVN sea, por ejemplo:
a
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 @