Bei vielen Subversion-Vorgängen können Sie durch Anhängen des Symbols '@' an das Ende einer Datei oder eines URL-Arguments eine bestimmte Revision dieser Datei als Ziel festlegen. Beispielsweise gibt "svn info test.txt@1234" Informationen zu test.txt an, wie sie in Revision 1234 vorhanden waren.
Wenn der Name der Datei jedoch ein @ enthält, wird er von Subversion fälschlicherweise als Revisionsspezifizierer interpretiert:
svn info 'test @ .txt' svn: Syntaxfehler beim Parsen der Revision '.txt'
Ich habe versucht, doppelte und einfache Anführungszeichen zu setzen und mit '/', '\' und '@' zu entkommen. Wie kann ich Subversion anweisen, die @ -Symbole als Teil des Dateinamens zu behandeln?
Antworten:
Aus dem SVN-Buch (Hervorhebung hinzugefügt):
quelle
news@11
auch um eine Datei handeln.@foo
auf@bar
,svn rename @foo@ @bar
wird zu bemängeln@bar
; aber wenn Sie es schaffensvn rename @foo@ @bar@
, wird der neue Name buchstäblich sein@bar@
. Um dies zu vermeiden, fügen Sie./
(oder.\
unter Windows) hinzu, um zu verdeutlichen, dass es sich um einen lokalen Pfad handelt :svn rename @foo@ ./@bar
.Die ursprüngliche Antwort ist richtig, aber vielleicht nicht explizit genug. Die speziellen Unix-Befehlszeilenoptionen lauten wie folgt:
oder
oder
Ich habe gerade alle drei getestet.
quelle
svn info [email protected]@
und es hat auch funktioniert. Ja, keine Anführungszeichen oder Schrägstriche!bash
Autobahn :)Lösung zum Hinzufügen mehrerer Dateien in verschiedenen Unterordnern:
Ersetzen Sie einfach das "png" in " @ .png" durch die Art von Dateien, die Sie hinzufügen möchten.
quelle
@
in ihrem Namen nicht als Sonderfall behandelt werden. Sie können das@
Symbol sicher an alle Dateinamen anhängen :for file in $(find ./ -type f -iname "*.png"); do svn add "$file@"; done
. Lässt Ihr Ansatz Ihr SVN-Repo nicht mit einer Datei- / Verzeichnisstruktur zurück, die nicht mit der funktionierenden lokalen Kopie übereinstimmt?exec
von find könnte eifriger sein:find . -type f -name "*@*.png" -exec svn add {}@ \;
Um die folgende Datei hinzuzufügen: [email protected] Gehen Sie wie folgt vor: svn add image \ @ 2x.png @
quelle
Einfach hinzufügen
An der Datei, die Sie verwenden müssen, unabhängig davon, um welchen SVN-Befehl es sich handelt, z.
zu
quelle
In meinem Fall musste ich Dateien aus einem SVN-Repo entfernen, das ein @ -Zeichen enthielt:
Das würde nicht funktionieren:
Aber das tat:
quelle
Um mehrere Dateien hinzuzufügen, gibt es eine alternative Lösung:
quelle
svn status | awk '/\.png/ {print $2"@"}'| xargs svn add
Für svn-Befehle mit 2 Argumenten wie "move" müssen Sie "@" nur am linken (ersten) Parameter anhängen . Beispielsweise:
Diese Zeile ist wichtig: $ svn move README @ txt @ README2 @ txt
Wie Sie sehen, müssen wir bei "README2 @ txt" kein "@" anhängen.
quelle
@ David H.
Ich habe gerade einen ähnlichen Befehl ausprobiert, ohne die @ -Symbole zu umgehen, und er funktioniert immer noch einwandfrei
Dies ist auf GNU Bash, Version 3.2.48 (1) -Veröffentlichung (x86_64-apple-darwin10.0) und SVN 1.6.16
quelle
Die einzige Lösung, die für mich funktioniert hat, war die gleiche, die @NPike vorgeschlagen hat
svn revert 'path / to / filename @ ext @'
quelle
Ich hatte heute das Problem mit Dateinamen, die aus E-Mail-Adressen generiert wurden (keine sehr gute Idee!).
Lösung mit
printf
Optionenfind
und Shell-Erweiterungquelle