web-dev-qa-db-fra.com

Comment échapper aux @ caractères dans les noms de fichiers gérés par Subversion?

Pour de nombreuses opérations Subversion, l'ajout du symbole '@' à la fin d'un fichier ou d'un argument d'URL vous permet de cibler une révision spécifique de ce fichier. Par exemple, "svn info test.txt@1234" donnera des informations sur test.txt tel qu'il existait dans la révision 1234.

Cependant, lorsque le nom du fichier contient un @, il est interprété de manière incorrecte par Subversion en tant que spécificateur de révision:

svn info 'test @ .txt' svn: erreur de syntaxe lors de l'analyse de la révision '.txt'

J'ai essayé les guillemets simples et doubles, ainsi que l'échappement avec '/', '\' et '@'. Comment puis-je dire à Subversion de traiter les symboles @ dans le nom du fichier?

189
weston

Du livre SVN (italiques ajoutés):

Le lecteur perspicace se demande probablement à ce stade si la syntaxe de révision de rattachement pose des problèmes pour les chemins de copie de travail ou les URL contenant réellement des signes. Après tout, comment svn sait-il si news@11 est le nom d'un répertoire dans mon arbre ou juste une syntaxe pour “révision 11 de news”? Heureusement, alors que svn assumera toujours ce dernier point, il existe une solution de contournement triviale. Il vous suffit d'ajouter un signe ar à la fin du chemin , tel que news@11@. svn ne s'intéresse qu'au dernier signe dans l'argument, et il n'est pas considéré illégal d'omettre un spécificateur de révision de rattachement de rattachement littéral après ce signe. Cette solution de contournement s’applique même aux chemins qui se terminent par un arobase (vous utiliseriez filename@@ pour parler d'un fichier nommé filename @.

281
Rob Kennedy

La réponse initiale est correcte, mais peut-être pas assez explicite. Les options de ligne de commande unix particulières sont les suivantes:

svn info '[email protected]@'

ou

svn info "[email protected]@"

ou

svn info image\@2x.png\@

Je viens de tester les trois.

82
David H

Solution pour ajouter plusieurs fichiers dans différents sous-dossiers:

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

Il suffit de remplacer le "png" dans "@. Png" par le type de fichiers que vous souhaitez ajouter.

14
Lcsky

pour ajouter le fichier suivant: [email protected], procédez comme suit: svn add image\@ 2x.png @

11
Malek Belkahla

Ajoutez simplement

@

au niveau du fichier que vous devez utiliser, quelle que soit la commande SVN, par exemple:

[email protected]

à

[email protected]@
9

Dans mon cas, je devais supprimer les fichiers d'un dépôt SVN contenant un signe @:

Cela ne marcherait pas:

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

Mais cela a:

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

Pour ajouter plusieurs fichiers, il existe une solution alternative:

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

Pour les commandes svn avec 2 arguments comme "move", vous devez ajouter "@" niquement au paramètre left (first). Par exemple:

$ 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.

Cette ligne est importante: $ svn move README @ txt @ README2 @ txt

Comme vous pouvez le constater, nous n'avons pas besoin d'ajouter "@" à "README2 @ txt"

1
Srdjan

@ David H

Je viens d'essayer une commande similaire sans échapper aux symboles @ et cela fonctionne toujours bien

svn ci splash.png [email protected]@

C'est sur GNU bash, version 3.2.48 (1) -release (x86_64-Apple-darwin10.0) et svn 1.6.16

0
Qazzian

J'ai eu le problème aujourd'hui avec les noms de fichiers générés à partir d'adresses e-mail (pas une très bonne idée!).

Solution utilisant printf options de find et expansion Shell

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

La seule solution qui a fonctionné pour moi était la même que celle suggérée par @NPike

svn revert 'chemin/en/nom du fichier @ ext @'

0
Jonyx4