Subsections
Dostęp do repozytorium w trybie pełnego wersjonowania (SVN)
W tym trybie użytkownik ma pełną kontrolę nad wersjonowaniem plików,
decyduje w którym momencie zmiany dokonanie w jednym lub w wielu plikach
mają zostać wysłane do repozytorium w postaci jednej atomowej operacji commit,
zwiększając wartrość rewizji o 1. Użytkownik ponadto może przeglądać historę zmian wybranych plików,
pobierać ich historyczne wersje, porównywać zmiany dokonane lokanie względem ostatniej rewizji pobranej z repozytorium itp.
Zaletą tego podejścia jest pełna kontrola nad wersjonowaniem plików oraz wynikające z tego usprawnienie pracy z plikami
objętymi kontrolą wersji. Wadą tego rozwiązania jest większa złożoność i konieczność przyswojenia dodatkowej wiedzy nt.
systemu kontroli wersji Subversion.
- repozytorium - baza danych na serwerze posiadająca pełną historię zmian dokonywanych w wersjonowanych plikach
- kopia robocza - najnowsza (lub wybrana) wersja plików z repozytorium na komputerze lokalnym.
Użytkownik może mieć wiele kopii roboczych związanych z jednym repozytorium.
- rewizja - Numer określający wersję plików w repozytorium, całe repozytorium ma jeden numer rewizji,
który jest zwiększany o 1 w przypadku pomyślnego zatwierdzenia zmian (operacja commit)
- head - określenie aktualnie najnowszej rewizji
- branch - rozgałęzienie równoległe wersji wybranych plików w repozytorium
- merge - złączenie rozgałęzienia do wybranej lub głównej gałęzi
- tag - oznaczenie (i zamrożenie) wybranej rewizji (bez planów na dalszy rozwój i złączania z inną gałęzią)
- trunk - określenie głównej gałęzi rozwoju
- konflikt - sytuacja gdy dwóch użytkowników chce wgrać różne dane jako tą samą rewizję
- checkout - pobranie najnowszej (lub wybranej) wersji danych z repozytorium i utworzenie kopii roboczej - wykonuję się to raz dla każdej kopii roboczej
- update - zaktualizowanie kopii roboczej do najnowszej (lub wybranej) rewizji z repozytorium
- commit - wysłanie zmian dokonanych w kopii roboczej do repozytorium - to zwiększy wersję repozytorium o jeden. Ta operacja jest atomowa - albo wszystkie zmiany są wprowadzane do repozytorium, albo żadne
- revert - cofnięcie lokalnych zmian dokonanych w kopii roboczej do ostatniej wersji pobranej z repozytorium (przez checkout lub update)
- add - dodanie niewersjonowanych plików do wersjonowania w ramach kopii roboczej.
Nowododane pliki mają status 'dodane' i należy jeszcze wykonać operację commit by zostały wysłane do repozytorium
i były dostępne dla innych użytkowników
- del - usunięcie plików z wersjonowania, to się wiąże (ale nie jest tożsame) ze skasowaniem plików z dysku.
Fakt usunięcia pliku z wersjonowania wymaga zatwierdzenia komendą commit
- status - wyświetlenie stanu plików w kopii roboczej - które są zmodyfikowane, dodane, usunięte, w konflikcie itp.
- blame/annotate - wyświetlenie przez kogo i kiedy, poiszczególne linie w danym pliku (tekstowym) były modyfikowane
- diff - wyświetlenie różnic w pliku (tekstowym) poimiędzy aktualnym (zmodyfikowanym) stanem w kopii roboczej, a referencyjną (najnowszą lub wybraną) wersją w repozytorium
By rozpocząć pracę z Subversion (zakładając że repozytorium zostało stworzone),
należy wykonać operację checkout, w wyniku której zostaną pobrane
pliki z repozytorium, i zostanie utworzona lokalna kopia robocza.
Operację checkout wykonuje się raz dla każdej kopii roboczej.
Typowy scenariusz pracy pracy z plikami pod kontrolą Subversion jest następujący:
- Przed rozpoczęciem pracy należy wykonać update i zaktualizować swoją kopię roboczą
- pobrać ew. zmiany które zostały dokonane w repozytorium od czasu ostatniej synchronizacji.
Zmiany mogły być dokonane przez innego użytkownika, lub z innego komputera (np. pobranie na komputer w pracy
zmian wgranych z komputera domowego).
- Mając zaktualizowaną kopię roboczą można normalnie pracować i dokonywać zmian w plikach
- W czasie dokonywania zmian można podglądać co zostało zmodyfikowane poleceniami status i diff (dla plików tekstowych).
- W przypadku gdy dokonane zmiany lokalne nie są właściwe, można je wycofać poleceniem revert.
- Jeśli dokonane zmiany są kompletne i sprawdzone, to możemy je przesłać do repozytorium wykonując operację commit.
Należy pamiętać o ew. dodaniu nowych plików, o ile powstały i powinny być wersjonowane (i o usunięciu tych które nie mają już być obsługiwane).
Dobrym zwyczajem jest dodanie krótkiej inforacji tekstowej, która opisuje dokonane zmiany (programy do obsługi SVN dają możliwość dodania opisu
a niekiedy nawet tego wymagają).
W przypadku gdy ktoś inny pobrał dany plik, przykładowo plik.txt, z repozytorium w tej samej rewizji, przykładowo 5,
dokonał zmian i przeprowadził operację commit pomyślnie tworząc w repozytorium rewizję 6, wówczas próba przeprowadzenia
przez nas operacji commit zakończy się niepowodzeniem, a po przeprowadzeniu operacji update
stan ww. pliku zostanie określony jako Konflikt (C).
W takiej sytuacji system Subversion tworzy w kopii roboczej następujące pliki:
- plik.txt - plik ze znacznikami do połączenia
- plik.txt.mine - plik z naszymi modyfikacjami
- plik.txt.r5 - plik w wersji bazowej przed dokonaniem naszych lokalnych zmian (w tym przykładzie rewizja 5)
- plik.txt.r6 - plik w najbardziej aktualnej wersji, jaka została poprawnie zatwierdzona w repozytorium
Znaczniki w pliku wynikowym są w następującym formacie:
...
Wspólna linia
Wspólna linia
<<<<<<< .mine
Zmiany wprowadzone przez nas
...
Zmiany wprowadzone przez nas
=======
Zmiany wprowadzone przez innego użytkownia w rewizji 6
...
Zmiany wprowadzone przez innego użytkownia w rewizji 6
>>>>>>> .r6
Wspólna linia
Wspólna linia
...
By rozwiązać konflikt można:
- Analizować każdy obszar w pliku plik.txt i decydować którą wersję każdego spornego obszaru wybrać.
Opcję edycji i wybierania obszarów spornych ze znacznikami mają wybrane edytory tekstu, np. Emacs.
- Usunąć plik ze znacznikami plik.txt i zastąpić go plikiem plik.txt.mine wymuszając swoje zmiany
- Zmodyfikować cały projekt tak, żeby funkcjonował poprawnie razem ze zmianani dokonanymi w repozytorium
W przypadku, gdy konieczne jest odtworzenie wybranej wersji historycznej danego pliku, należy wykonać operację update ze
wskazaniem rewizji którą chcemy uzyskać. Sposób przekazania parametru dla polecenia update jest zależny od wybranego programu.
W tej sekcji przedstawione zostaną nastepujące programy:
Do korzystania z repozytoriów SVN wystarczy jeden wybrany program.
W tym dokumencie opisano korzystanie z różnych aplikacji by pozostawić użytkownikowi możliwość wyboru
na wypadek gdyby np. z użyciem któregoś programu występowały problemy.
SmartSVN
SmartSVN jest aplikacją do obsługi systemu Subversion napisaną w języku Java,
dostępną dla systemów Windows, Linux i Mac OS X. SmartSVN jest
bezpłatny w wersji Foundation, która w zupełności wystarczy do
normalnej pracy.
Proces instalacji i pierwszego uruchomienia jest przedstawiony poniżej:
Rysunek 17:
Ekran powitalny programu instalacyjnego
 |
Rysunek 18:
Wybór lokalizacji w której ma zostać zainstalowany program
 |
Rysunek 19:
Nazwa grupy programów w Menu Start
 |
W czasie instalacji należy zdecydować czy program SmartSVN ma zostać
zintegrowany z powłoką systemu Windows, dostarczając funkcjonalność
zbliżoną do programu TortoiseSVN (3.2.2), która umożliwia
wykonywanie operacji związanych z wersjonowaniem plików z menu kontekstowego
Eksploratora Windows (kliknięcie prawym guzikiem myszy na wybrany plik lub katalog).
Rysunek 20:
Opcje instalacji programu SmartSVN
 |
W przypadku wybrania integracji z powłoką systemu Windows,
może wyskoczyć błąd pokazany na rysunku 21.
Jest on związany z wyświetlaniem ikon i nie ma wpływu na funkcjonowanie
wersjonowania plików, więc można go zignorować.
Rysunek 21:
Błąd związany z wyświetlaniem ikon w systemie Windows
 |
Rysunek 22:
Program gotowy do instalacji
 |
Po zainstalowaniu można od razu uruchomić program SmartSVN
Rysunek 23:
Program SmartSVN po zakończeniu instalacji
 |
Po pierwszym uruchomieniu programu SmartSVN, należy wybrać rodzaj licencji
(rys. 24). Bezpłatna licencja typu Foundation,
do której zostanie ograniczona po 31 dniach domyślna licencja
Professional, jest w zupełności wystarczająca do normalnej pracy.
Rysunek 24:
Pierwsze uruchomienie programu SmartSVN
 |
Wysyłanie raportów o awariach programu SmartSVN do jego twórców (rys. 25)
jest dobrowolne (wg. uznania użytkownika) i nie ma wpływu na funkcjonowanie z programu.
Rysunek 25:
Opcje przesyłania reportów o awariach programu do jego twórców
 |
W celu korzystania z programu do kontroli wersji, niezbędne jest posiadanie
repozytoriów z plikami. W opisywanym przypadku repozytoria zostały już utworzone
i taką opcję należy wybrać w czasie konfiguracji programu SmartSVN
(rys. 26).
Rysunek 26:
Konfiguracja repozytoriów w czasie pierwszego uruchomienia programu SmartSVN
 |
W celu rozpoczęcia pracy, należy pobrać z wybranego repozytorium pliki,
tworząc lokalnie kopię roboczą. Należy tego dokonać wykonując operację
checkout (rys. 27).
Rysunek 27:
Możliwe scenariusze rozpoczęcia pracy z programem SmartSVN
 |
W celu przeprowadzenia operacji checkout należy podać adres
wybranego repozytorium (rys. 28).
Rysunek 28:
Wybór adresu repozytorium
 |
Z uwagi iż połączenie z repozytorium jest szyfrowane protokołem SSL,
przy pierwszym połączeniu z danym serwerem niezbędne jest zaakceptowanie
certyfikatu SSL dla tego serwera (rys. 29). Przy podłączaniu
kolejnych repozytoriów z tego samego serwera, akceptowanie certyfikatu SSL
nie powinno występować.
Spontaniczne wystąpienie (bez jasnej przyczyny) komunikatu jak na rys.
29, gdy wcześniej wielokrotnie korzystano z repozytoriów
na danym serwerze, może oznaczać próbę ataku typu man in the middle.
W takiej sytuacji nie należy ponownie podawać swoich danych autoryzacyjnych
(loginu i hasła), lecz należy się skontaktować z osobą odpowiedzialną za
wybrany projekt.
Rysunek 29:
Akceptacja certyfikatu SSL serwera
 |
Po wybraniu repozytorium (i ew. zaakceptowaniu certyfiukatu SSL jeśli
to pierwsze połączenie z danym serwerem), należy podać swój login oraz hasło
(rys. 30).
Rysunek 30:
Autoryzacja dostępu do wybranego repozytorium
 |
W celu zachowania najwyższego poziomu bezpieczeństwa, program SmartSVN oferuje
możliwość zaszyfrowania swojej lokalnej bazy/listy haseł dostępu do obsługiwanych repozytoriów.
Zaszyfrowanie lokalnej bazy haseł wymaga ustawienia hasła nadrzędnego
(ang. master password, rys. 31).
Pomimo iż nie ma to wpływu na funkcjonowanie programu, zaszyfrowanie bazy haseł
jest zalecane.
Rysunek 31:
Możliwość zaszyfrowania lokalnej bazy haseł hasłem nadrzędnym
 |
Po podaniu poprawnego adresu repozytorium, loginu i hasła, możliwe jest nawiązanie
połączenia i wyświetlanie zawartości repozytorium oraz wybór zakresu plików
do pobrania (rys. 32).
Subversion pozwala zarówno na utworzenie kopii roboczej w oparciu całe repozytorium
lub o wybrany pod-folder.
Rysunek 32:
Wyświetlenie zawartości repozytorium, wybór zakresu danych do pobrania
 |
W przypadku próby pobrania całego repozytorium, program SmartSVN pyta o potwierdzenie
(rys. 33), gdyż w przypadku dużych repozytoriów mogłoby to
zająć dużo czasu i miejsca na dysku
Rysunek 33:
Potwierdzenie pobrania całego repozytorium
 |
Po wybraniu zakresu plików w repozytorium do pobrania, należy określić
w którym miejscu na dysku ma zostać utworzona kopia robocza (rys. 34).
Rysunek 34:
Określenie lokalizacji utworzenia kopii roboczej
 |
Ostatnim etapem operacji checkout jest ew. utworzenie projektu (rys. 35).
Projekt jest pojęciem wewnętrznym programu SmartSVN, nie jest on częścią standardu
Subversion. Projekt umożliwia on dalszą obsługę utworzonej kopii roboczej przez
program SmartSVN.
Utworzenie projektu jest zalecane w celu normalnego korzystania z programu SmartSVN.
Rysunek 35:
Opcje dalszej obsługi nowopowstałej kopii roboczej
 |
Po utworzeniu i otwarciu projektu powiązanego z wybraną kopią roboczą możliwa jest
praca z wersjonowanymi plikami (rys. 36)
Rysunek 36:
Okno programu SmartSVN z otwartą kopią roboczą
 |
Po wybraniu odpowiedniego pliku (zależnie od jego stanu),
możliwe jest wykonywanie wybranych operacji SVN, takich jak np.
update, commit, revert, itp. (rys. 37)
Rysunek 37:
Dostępne opcje programu po wybraniu danego pliku
 |
TortoiseSVN
TortoiseSVN jest klientem Subversion który integruje się z powłoką systemu operacyjnego MS Windows,
i umożliwia wykonywanie operacji związanych z wersjonowaniem plików z poziomu menu kontekstowego
(po kliknięciu prawym guzikiem myszy) w wybrany plik lub katalog.
Odpowiednikiem TortoiseSVN dla platformy Mac OS X jest SnailSVN
Proces instalacji i uruchomienia jest przedstawiony poniżej:
Rysunek 38:
Ekran powitalny programu instalacyjnego TortoiseSVN
 |
Rysunek 39:
Licencja programu TortoiseSVN
 |
Rysunek 40:
Opcje instalacji programu TortoiseSVN
 |
Rysunek 41:
Program gotowy do instalacji
 |
Rysunek 42:
Program po instalacji
 |
W celu utworzenia kopii roboczej, należy kliknąć prawym guzikiem myszy
w tło danego folderu i wybrać opcję SVN Checkout (rys. 43).
Rysunek 43:
Tworzenie kopii roboczej w wybranym folderze systemu MS Windows
 |
By utworzyć kopię roboczą, należy podać m.in. (rys. 44):
- URL (adres) Repozytorium
- Katalog w którym ma powstać nowa kopia robocza
- Rewizję którą chcemy pobrać (HEAD oznacza najbardziej aktualną rewizję).
Rysunek 44:
Opcje operacji checkout
 |
By uzyskać dostęp do repozytorium, niezbędne jest podanie danych
autoryzacyjnych - loginu i hasła (rys. 45).
Rysunek 45:
Autoryzacja dostępu do repozytorium
 |
Po poprawnym przeprowadzeniu operacji checkout,
wyświetlone zostanie podsumowanie (rys. 46).
Rysunek 46:
Podsumowanie poprawnie przeprowadzonej operacji checkout
 |
W celu wykonania wybranych operacji SVN, należy kliknąć na wybrany plik lub katalog prawym
guzikiem myszy, i z menu TortoiseSVN wybrać daną operację SVN (47).
Zależnie od stanu pliku, różne operacje mogą być dostępne, dla nowego (niewersjonowanego)
pliku dostępna będzie operacja add, dla wersjonowanego pliku dostępna będzie operacja
update, itp.
Rysunek 47:
Dostępne operacje SVN dla wybranego pliku
 |
Polecenie svn w systemach operacyjnych typu POSIX
W większości systemów operacyjnych typu POSIX, takich jak np. Linux, dostępne jest polecenie svn.
Jest to podstawowa implementacja programu do obsługi systemu wersjonowania Subversion. Polecenie svn
umożliwia wykonanie każdej operacji dostępnej w systemie Subversion.
Program ten nie posiada graficznego interfejsu użytkownika, poszczególne operacje związane z
wersjonowaniem plików należy wykonywać wydając odpowiednie komendy w wierszu poleceń.
Komendy mają ogólną strukturę:
svn <komenda> [opcjonalne parametry]
Lista dostępnych komend może być wyświetlona za pomocą:
svn help
szczegóły wybranej komendy można uzyskać wydając polecenie:
svn help <komenda>
Operacja Checkout:
jarek@carbon:~/polfel$ svn checkout https://polfel.ncbj.gov.pl/svn/test
Obszar uwierzytelniania: <https://polfel.ncbj.gov.pl:443> PolFEL SVN Repository
Hasło 'jarek':
Obszar uwierzytelniania: <https://polfel.ncbj.gov.pl:443> PolFEL SVN Repository
Użytkownik: szewinskij
Hasło 'szewinskij': ********
A test/Folder1
A test/Folder1/CarotDAV1.15.5.portable.zip
A test/System Volume Information
A test/System Volume Information/IndexerVolumeGuid
A test/Cyberduck-Installer-6.8.3.29107.exe
A test/basic_auth.reg
A test/polfel.jpg
Pobrano wersję 29.
jarek@carbon:~/polfel$
Utworzenie nowego pliku i nazwie ”plik.txt” i zawartości ”test”,
oraz sprawdzenie stanu kopii roboczej - nowy plik ”plik.txt” zostanie wskazany jako nieznany (niewersjonowany):
jarek@carbon:~/polfel/test$ echo test > plik.txt
jarek@carbon:~/polfel/test$ svn status
? plik.txt
Dodanie nowego pliku do kontroli wersji, plik zostanie wskazany jako dodany (A):
jarek@carbon:~/polfel/test$ svn add plik.txt
A plik.txt
Zatwierdzenie dodania pliku i przesłanie zmian do repozytorium:
jarek@carbon:~/polfel/test$ svn commit -m "Dodano plik.txt"
Dodawanie plik.txt
Przesyłanie treści pliku.done
Committing transaction...
Zatwierdzona wersja 30.
Zmiana zawartości pliku, plik zostanie wskazany jako zmodyfikowany (M):
jarek@carbon:~/polfel/test$ cat plik.txt
test
jarek@carbon:~/polfel/test$ echo "nowa zawartość" > plik.txt
jarek@carbon:~/polfel/test$ svn status
M plik.txt
jarek@carbon:~/polfel/test$ cat plik.txt
nowa zawartość
Wycofanie lokalnej zmiany:
jarek@carbon:~/polfel/test$ cat plik.txt
nowa zawartość
jarek@carbon:~/polfel/test$ svn revert plik.txt
Wycofano zmiany w 'plik.txt'
jarek@carbon:~/polfel/test$ cat plik.txt
test
Usunięcie wersjonowanych plików z dysku oraz ich odtworzenie poleceniem update:
jarek@carbon:~/polfel/test$ rm basic_auth.reg plik.txt polfel.jpg
jarek@carbon:~/polfel/test$ svn status
! basic_auth.reg
! plik.txt
! polfel.jpg
jarek@carbon:~/polfel/test$ svn update
Updating '.':
Odtworzono 'plik.txt'
Odtworzono 'basic_auth.reg'
Odtworzono 'polfel.jpg'
W wersji 30.
jarek@carbon:~/polfel/test$
|