2009-12-31 11 views
34

gdy próbuję wykonać polecenie tak (z wiersza polecenia lub skryptu Perl - to nie ma znaczenia):Dlaczego Subversion pomija pliki zawierające symbol @?

svn revert "build\[email protected]" 

SVN pomija ten plik i wyjść:

Skipped 'build\myfile' 

próbowałem robi:

svn revert "build\*.meta" 

Ale daje ten sam rezultat.

Mogę przywrócić te pliki z GUI. I mogę przywrócić te pliki wykonując (ale to powraca ponad chcę):

svn revert --recursive "build" 

Czy istnieje obejście tego?

Odpowiedz

80

znaku @ w nazwach plików w Subversion faktycznie ma specjalne znaczenie - sztywny kurs numer wersji. Cytując Subversion book:

spostrzegawczy czytelnik zapewne zastanawiasz się w tym momencie, czy składnia rewizja PEG powoduje problemy dla pracy kopiowania ścieżek lub adresy URL, które rzeczywiście mają na nich oznaczeń. W końcu, skąd svn wie, czy news @ 11 to nazwa katalogu w moim drzewie, czy tylko składnia "rewizji 11 wiadomości"? Na szczęście, podczas gdy svn zawsze zakłada to drugie, istnieje trywialne obejście. Musisz tylko dołączyć znak na końcu ścieżki, taki jak news @ 11 @. svn dba tylko o ostatni znak w argumencie i nie jest uważane za nielegalne, aby pominąć literalny specyfikator rewizji peg po tym znaku. To obejście dotyczy nawet ścieżek, które kończą się znakiem "na" - używałbyś nazwy pliku @@ do mówienia o pliku o nazwie filename @.

Więc należy dołączyć znaku @ do nazw plików w skryptach, tak:

svn revert "build\[email protected]@" 
+0

Użyj poniższego skryptu bhavinb, aby zrobić to dla każdego pliku w katalogu. Świetny scenariusz i świetna odpowiedź Avi. –

+0

Dziękujemy! Szaleję. – Evert

+0

+1 Wielkie dzięki, też zwariowałem^_^ – Niko

0

Jaki system operacyjny? Jeśli jest to system * nix, spróbuj zacytować swój plik za pomocą "pojedynczego @ cudzysłowu".

+0

okien To. Pojedyncze cytaty nie działają - otrzymujesz wyniki w następujący sposób: Pominięto "kompilację" (tj. Podwójne pojedyncze cytaty) –

+1

@Paulius: Znajomość systemu operacyjnego w oryginalnym pytaniu byłaby przydatna. –

+0

również, sztuczka pojedynczego cudzysłowu nie działa tak na ten temat na nix – Purrell

2

Właśnie testowałem go prawidłowo w systemie Windows przy użyciu powłokę cmd.exe - otaczającą nazwę w cudzysłów działa:

ctmkx> svn revert "trunk\[email protected]" 
Reverted 'trunk\[email protected]' 
22

Wystarczy dodać do powyższego poprawną odpowiedź, jeśli masz dużo plików z symbolem „@” w ich imieniu, które chcą przetwarzać w partii (czyli użycie * wieloznaczny), można zrobić coś takiego w OS X Terminal (lub jakiegokolwiek Linuksa naprawdę):

find . -name "*@*" | xargs -I % svn add %@ 

powyższe polecenie stosuje się w find narzędzie do wypisania każdego pliku z @ w jego filename, a następnie potnij ścieżkę do pliku do SVN za pomocą XARGS. XARGS zastąpi każde wystąpienie% ścieżką i dopisze specjalne "@" na końcu nazwy pliku, aby SVN ją zaakceptował.

Nadzieja to pomaga - musiałem walić głową na trochę, aby dodać gazzilion @ 2x.png plików, które były potrzebne dla mojego app być przeniesieni do iOS4.0

+0

To działało idealnie za pierwszym razem. Dziękuję serdecznie! –

+0

To był ratownik. Właściwie to połączyłem go ze statystyką svn | grep "^?" | awk "{print 2 $}" xargs svn dodaj do svn stat | grep "^?" | awk "{print 2 $}" xargs -I% svn dodaj% @ – Das

Powiązane problemy