Status „S” w Subversion

80

W pewnym momencie wszystkie pliki w mojej kopii roboczej zostały oznaczone symbolem „S”, jak pokazano poniżej:

$ svn st
M    S   AclController.php
     S   InstallationController.php
     S   CustomerController.php
     S   RedirController.php
     S   IndexController.php
     S   LoginController.php
     S   OrderController.php
     S   ProductController.php
     S   SelfInstallController.php
     S   SelfcareController.php

Co ciekawe, pojawia się tylko w tej konkretnej kopii roboczej - kiedy wyewidencjonuję projekt do nowego katalogu, nie pokazuje on znaków "S".

Jak pozbyć się irytujących symboli „S”? Znacząco zmniejsza wyrazistość stanu WC.

Aktualizacja: przełączam się od czasu do czasu używając standardowej svn switchskładni. To nigdy nie powodowało pojawienia się tego symbolu „S” aż do niedawna. Polecenie użyte do przełączenia to:

svn switch svn+ssh://xxxxxx/subversion/xxxxxxx/releases/1.0.16 .

Czy jest jakiś sposób, aby usunąć flagę „S”?

Michał Rudnicki
źródło
7
Status S oznacza „przełączany”, zgodnie z svn h st. Co to znaczy, ale ...
me_and
1
@me_and: Zmiana kopii roboczych: svnbook.red-bean.com/en/1.0/ch04s05.html
Chris J
1
Tak dla porządku - ponieważ jest to najbliższy problem, jaki znalazłem w Internecie - mieliśmy problem z flagą S podczas próby scalenia gałęzi z pniem. Miało to związek z faktem, że korzystaliśmy z zewnętrznych. Zostały usunięte z gałęzi, ale linia główna nadal do nich odwoływała się, przez co nie udało się połączyć. Rozwiązaniem było usunięcie zewnętrznych elementów, które usunęliśmy z gałęzi w pniu, zatwierdzenie pnia i ponowna integracja. Mam nadzieję, że to pomoże komuś po drodze :) Pozdrawiam!
Darío Javier Cravero

Odpowiedzi:

76

Oznacza to, że pliki pochodzą z innej lokalizacji w repozytorium subversion niż katalog je zawierający. Rozwiązaniem jest przeniesienie całej kopii roboczej w to samo miejsce. Zobacz dwie sekcje w książce Subversion, aby dowiedzieć się, jak wywołać polecenie.

Andrew Aylett
źródło
35
Widziałem to również wtedy, gdy polecenie „svn switch” zostało przerwane przez jakiś konflikt, taki jak gałąź, którą przełączasz na wersję repozytorium lokalnego pliku, która nie została zatwierdzona. Wyskakiwanie z svn w celu naprawienia, które pozostawia całą kopię roboczą niecałkowicie przełączoną. Rozwiązanie problemu, a następnie ponowne wykonanie polecenia przełącznika działa u mnie.
Michael H.,
4
Wystąpił następujący błąd - E210002: Połączenie sieciowe zostało nieoczekiwanie zamknięte. Wydawało się, że ponowne wykonanie polecenia przełączenia rozwiązało problem, a status „S” zniknął.
Kevin Sadler
1
Przyczyną tego jest przerwa podczas przełączania svn. Być świadomym.
SandorRacz
2
Kevin Sadler faktycznie dostarcza rozwiązania, a nie tylko opisuje problem. +1
ahnbizcad
11

Jeśli wywołasz „svn info” w samym katalogu i (jednym z) plików w środku, otrzymasz dwa różne adresy URL.

Status „S” uzyskuje się, jeśli adres URL pliku / katalogu nie pasuje do adresu URL elementu nadrzędnego, po którym następuje nazwa pliku.

Czy możesz opublikować adres URL rodzica i jednego z węzłów podrzędnych? (anonimizacja adresu URL w stosownych przypadkach)

Bert Huijben
źródło
Chociaż nie jest to odpowiedź, ta „odpowiedź” jest bardzo pomocna, aby dać kilka wskazówek, co się dzieje.
FlipMcF
to nie jest odpowiedź.
ahnbizcad
8

Miałem status `` S '' podczas przełączania z linii miejskiej (r100) na jakąś gałąź (r50). Wyskoczył mi błąd:

svn: Failed to add file 'web/.htaccess': an unversioned file of the same name already exists

Wszystkie podkatalogi sieci / podkatalogów zostały oznaczone jako „ S ”.

Przyczyna: usunąłem .htaccess do svn: zignoruj ​​go (r100), a następnie utworzyłem go ponownie (bez wersji i zignorowany). Oddział (r50) nadal miał w repozytorium dostęp do sieci / .htaccess.

Rozwiązanie :

mv web/.htaccess ../../
svn switch back to trunk
svn switch to branch again

Wszystko w porządku.

sglessard
źródło
Miałem podobny błąd, ale usunąłem moją obraźliwą wersję "web / .htaccess" (ponieważ dla mnie było to kilka katalogów) i wykonałem aktualizację svn, a następnie przełączyłem się z linii miejskiej na konkretny tag z powrotem do linii głównej (konkretny tag był w rzeczywistości kopia bagażnika ...) i błędne flagi „S” zniknęły.
Kasapo
6

Miałem ten problem z katalogiem, który pomyślnie zatwierdziłem do SVN. Rozwiązaniem dla mnie było wymazanie go lokalnie, a następnie aktualizacja. Nie widziałem żadnych różnic, ale plik .svn został naprawiony z dowolnego powodu (nie ma już S).

Eli
źródło
Zdarzyło mi się to w zewnętrznym svn po aktualizacji do nowszej gałęzi. Usunięcie całego zewnętrznego ręcznie, a następnie uruchomienie aktualizacji svn naprawiło to. +1!
Stephen Fuhry
5

Zwykle jest to spowodowane przerwą podczas przełączania gałęzi.

Przełącz się na inną gałąź, a następnie wróć do tej, którą naprawdę chcesz.

svn switch some_other_branch_url

svn switch desired_branch_url

ahnbizcad
źródło
4

Tylko uwaga: otrzymałem ten sam symbol S, kiedy wyewidencjonowałem usunięty katalog z tej samej lokalizacji w repozytorium, ale używając innego adresu URL , tj. Używając różnych protokołów do wyewidencjonowania, takich jak `` svn checkout svn + ssh: // user @ scm .gforge ... 'przeciwko' svn checkout --username user https: //scm.gforge .... '. Rozwiązałem to, sprawdzając go ponownie, używając tego samego adresu URL, którego użyłem przy pierwszej kasie.

André Lage
źródło
Ponowne pobranie z tym samym identyfikatorem URI rozwiązało problem. Dziękuję Ci.
wrzesień
4

W przypadku, gdy ktoś spóźnia się, szukając odpowiedzi (co jest poprawnie podane powyżej), uważam, że prawdopodobną PRZYCZYNĄ tej sytuacji jest `` przełącznik svn '' w katalogu nadrzędnym, który kończy się niepowodzeniem (jak w przypadku lokalnego niezatwierdzonego pliku z ta sama nazwa, bez opcji --force), pozostawiając wszystkie pliki po awarii „nieprzełączone”.

Dlatego (zakładając, że pierwotny problem zostanie później naprawiony) kolejny „przełącznik svn” ponownie w tym samym katalogu nadrzędnym rzeczywiście przełączy pozostałe nieprzełączone pliki na nową ścieżkę repozytorium.

John Kennedy
źródło
3

Oznacza to, że przełączyłeś się z jednej kopii roboczej na inną, na przykład pobrałeś kopię roboczą, a następnie zamieniłeś ją, aby porównać ją z gałęzią kodu. Zajrzyj do książki SVN, aby dowiedzieć się, jak to cofnąć.

ja i
źródło
1
Zwróć uwagę, że link prowadzi do nieaktualnej wersji książki SVN. Spróbuj tutaj: svnbook.red-bean.com/en/1.5
Andrew Aylett,
Dobre miejsce. Google znowu mnie zawodzi.
me_and
3

Istnieje inny sposób, w jaki można osiągnąć ten status - co, miejmy nadzieję, pozwoli komuś zaoszczędzić trochę czasu na jego tropieniu.

Rozpakowałem zewnętrzną bibliotekę do mojego katalogu głównego SVN i okazuje się, że autor będący stroną trzecią przypadkowo umieścił swój własny folder .svn w jednym ze swoich folderów. To oczywiście zastępuje nasz własny, poprawny folder subversion i ma taki sam efekt, jak opisano w innym miejscu na tej stronie - wydaje się, że folder został nieoczekiwanie przełączony do innej gałęzi.

halfer
źródło
1
Tak, właśnie to miałem. Skopiowałem katalog ikon z jednego projektu do drugiego bez usuwania .svnkatalogów. Albo wyeksportuj czysty katalog do użycia, albo przejrzyj i usuń katalogi .svn po skopiowaniu, a będzie to svn addprzewidywalne.
Eric
1

„Pozycja jest przełączona”.

Jeśli użyłeś "przełącznika svn" na kopii roboczej, to może to wyjaśnić?

stiank81
źródło
Próbowałem użyć polecenia przełączającego teraz, ale nie zawsze uzyskać „S” w stanie .. Czy przełącznik i zrobiłeś to w jakiś sposób żaden głównego nurtu?
stiank81
0

U mnie dzieje się tak, gdy polecenie "przełącznik svn" jest przerwane i aby rozwiązać problem za pomocą TortoriseSVN, klikam prawym przyciskiem myszy na pliku i wybieram przełącz się z powrotem na rodzica

Alireza Fattahi
źródło
0

Proste rozwiązanie, aby pozbyć się litery „S” podczas wydawania

svn status

to po prostu przejść do katalogu oznaczonego literą „S” i usunąć ukryty katalog .svn:

rm -rf .svn

Następnie źródła pojawiają się oznaczone „?” i możesz je łatwo dodać na nowo:

svn dodaj ścieżkę / do / zasób

Torsten Barthel
źródło
W moim przypadku „S” pojawiło się obok zasobów, które dodałem z innego repozytorium na tym samym serwerze, więc rozwiązanie, które właśnie opisałem powyżej, było oczywiste.
Torsten Barthel
0

W moim przypadku dwa podkatalogi w gałęzi zostały usunięte z bagażnika. Przełączyłem się z linii głównej do gałęzi z katalogu najwyższego poziomu, a następnie wróciłem do linii głównej i napotkałem problem z tymi podkatalogami, które mają teraz status S.

Jako wskazówkę posłużyłem się odpowiedzią @ahnbizcad. Z katalogu nadrzędnego (który sam znajduje się w katalogu najwyższego poziomu) podkatalogów:

svn sw <branch_url>

svn sw <trunk_url>

Soumya Kanti
źródło
-6

Proponuję zapoznać się z jego oficjalną pomocą, spróbuj:

svn st --help

lub

svn st --help | grep S

'S' the item has a Switched URL relative to the parent
Siwei Shen 申思维
źródło
4
RTFM nie odpowiada na pytanie, jak pozbyć się tego statusu.
Madoc