W przypadku wielu operacji Subversion dodanie symbolu „@” na końcu argumentu pliku lub adresu URL pozwala na wybranie określonej wersji tego pliku. Na przykład „svn info test.txt@1234” poda informacje o test.txt, tak jak istniało w wersji 1234.
Jednak gdy nazwa pliku zawiera @, jest niepoprawnie interpretowana przez Subversion jako specyfikator wersji:
svn info 'test @ .txt' svn: Błąd składni podczas analizy wersji '.txt'
Próbowałem podwójnych i pojedynczych cudzysłowów, a także znaków ucieczki za pomocą „/”, „\” i „@”. Jak mogę powiedzieć Subversion, aby traktował symbole @ jako część nazwy pliku?
Odpowiedzi:
Z książki SVN (wyróżnienie dodane):
źródło
news@11
może być również plikiem.@foo
na@bar
,svn rename @foo@ @bar
będą narzekać@bar
; ale jeśli to zrobiszsvn rename @foo@ @bar@
, nowa nazwa będzie dosłownie@bar@
. Aby tego uniknąć, należy dodać./
(lub.\
w systemie Windows), aby było jasne, że jest to ścieżka lokalna:svn rename @foo@ ./@bar
.Oryginalna odpowiedź jest poprawna, ale być może nie jest wystarczająco wyraźna. Poszczególne opcje wiersza poleceń unix są następujące:
lub
lub
Właśnie przetestowałem wszystkie trzy.
źródło
svn info [email protected]@
i to też zadziałało. Tak, bez cudzysłowów i ukośników!bash
autostradzie :)Rozwiązanie do dodawania wielu plików w różnych podfolderach:
Po prostu zamień „png” w „ @ .png” na pliki, które chcesz dodać.
źródło
@
w ich imieniu jako szczególny przypadek, można bezpiecznie dołączyć@
symbol na wszystkich nazw plików:for file in $(find ./ -type f -iname "*.png"); do svn add "$file@"; done
. również, czy to podejście nie pozostawia repozytorium svn ze strukturą plików / katalogów niespójną z działającą lokalną kopią?exec
find może być łatwiejsze:find . -type f -name "*@*.png" -exec svn add {}@ \;
aby dodać następujący plik: [email protected] wykonaj następujące czynności: svn dodaj obraz \ @ 2x.png @
źródło
Po prostu dodaj
w pliku, którego potrzebujesz użyć, bez względu na to, jakie jest polecenie SVN, np .:
do
źródło
W moim przypadku musiałem usunąć pliki z repozytorium SVN, które zawierały znak @:
To nie zadziałałoby:
Ale to zrobiło:
źródło
Aby dodać wiele plików, istnieje alternatywne rozwiązanie:
źródło
svn status | awk '/\.png/ {print $2"@"}'| xargs svn add
W przypadku poleceń svn z 2 argumentami, takimi jak „move”, należy dołączyć „@” tylko przy lewym (pierwszym) parametrze. Na przykład:
Ta linia jest ważna: $ svn move README @ txt @ README2 @ txt
Jak widać, nie musimy dołączać „@” do „README2 @ txt”
źródło
@David H.
Właśnie próbowałem podobnego polecenia bez uciekania się od symboli @ i nadal działa dobrze
To jest na GNU bash, wersja 3.2.48 (1) -release (x86_64-apple-darwin10.0) i svn 1.6.16
źródło
Jedynym rozwiązaniem, które działało dla mnie, było to samo sugerowane przez @NPike
svn revert 'path / to / filename @ ext @'
źródło
Miałem dzisiaj problem z nazwami plików generowanymi z adresów e-mail (niezbyt dobry pomysł!).
Rozwiązanie, używając
printf
opcjifind
i rozszerzenia powłokiźródło