Rozróżnienie pomiędzy statusem a aktualizacją (update)

Subversion próbuje usunąć wiele nieporozumień związanych z funkcjonowaniem polecenia cvs status a cvs update.

Polecenie cvs status na dwa zadania: po pierwsze, pokazać użytkownikowi wszystkie lokalne modyfikacje w kopii roboczej i po drugie, pokazać, które pliki są nieaktualne. Niestety, z powodu braku czytelności wyniku polecenia cvs status, wielu użytkowników CVSa w ogóle nie wykorzystuje jego możliwości. W zamian wypracowali nawyk uruchamiania poleceń cvs update lub cvs -n update aby szybko podejrzeć swoje zmiany. W momencie gdy użytkownik zapomina o użyciu opcji -n powstaje skutek uboczny w postaci scalenia zmian z repozytorium, które mogły nie być jeszcze do tego przygotowane.

Subversion pozbywa się tego bałaganu porzez stworzenie czytelnego dla ludzi i parserów wyniku polecenia svn status. Ponadto, svn update wypisuje tylko informacje na temat plików, które są aktualizowane, a nie na temat lokalnych modyfikacji.

Status

svn status wypisuje wszystkie pliki, w których dokonano lokalnych zmian. Domyślnie, połączenie z repozytorium nie jest nawiązywane. Chociaż to podpolecenie posiada sporo opcji, poniżej wypisane należą do najczęściej uzywanych:

-u

Łączy się z repozytorium aby sprawdzić i wyświetlić informacje na temat plików nieaktualnych.

-v

Wyświetla wszystkie obiekty znajdujące się pod kontrolą wersji.

-N

Działa nierekursywnie (nie zagłebia się do podkatalogów).

Polecenie svn status ma dwa formaty wyswietlania wyników. W domyślnym „skróconym” formacie, lokalne modyfikacje wyglądają tak:

$ svn status
M      foo.c
M      bar/baz.c

Jeśli użyjesz przełacznika --show-updates (-u), użyty zostanie dłuższy format:

$ svn status -u
M            1047   foo.c
       *     1045   faces.html
       *            bloo.png
M            1050   bar/baz.c
Status against revision:   1066

W takim wypadku pojawiają się nowe kolumny. Druga z nich zawiera gwiazdki jeżeli plik lub katalog jest nieaktualny. Trzecia wyświetla numer rewizji danego obiektu w kopii roboczej. W poprzednim przykładzie, gwiazda oznaczała, że plik faces.html zostanie zmieniony podczas aktualizacji oraz że bloo.png jest plikiem świeżo dodanym do repozytorium. (Brak numeru rewizji obok bloo.png oznacza, że nie istniał w kopii roboczej.)

W tym miejscu dobrze byłoby przejrzeć listę wszystkich możliwych kodów statusowych opisanych w svn status. Poniżej przedstawiamy kilka najczęściej spotykanych:

A    Zasób w kolejce do Dodania
D    Zasób w kolejce do Usunięcia
M    Zasób został zmodyfikowany lokalnie
C    Zasób jest skonfliktowany (zmiany nie zostały kompletnie scalone między
       wersjami z kopii roboczej a repozytorium)
X    Zasób jest obiektem zewnętrznym dla tej kopii roboczej (może pochodzić
       z innego repozytorium). Patrz „Externals Definitions”
?    Zasób nie jest objęty kontrolą wersji
!    Brak zasobu lub jest on niekompletny (usunięty przez narzędzie inne niż
       Subversion)

Dokładniejsza dyskusja na temat polecenia svn status dostępna jest tu: „Zobacz przegląd zmian”.

Aktualizacja (Update)

svn update aktualizuje Twoją kopię roboczą oraz wypisuje tylko informacje o plikach nią objętych.

Subversion połączyło CVSowe kody P i U w jeden tylko U. Kiedy następuje scalenie lub konflikt, Subversion po prostu wypisuje kod G lub C zamiast całego wyrażenia.

Po bardziej szczegółową dyskusję na temat polecenia svn update, zajrzyj do „Synchronizacja (aktualizacja) kopii roboczej”.