Blog webdeveloperski Patryk yarpo Jar

Kontrola wersji z TortoiseSVN (Windows)

Autor wiadomości Lipiec 23, 2015

W poniższym wpisie opiszę jeden z najpopularniejszych klientów SVN na system operacyjny Windowsa - TortoiseSVN. Pozwala on w łatwy sposób korzystać z SVN w trybie graficznym.

Opisane operacje:

Na początek

Jeśli nie wiesz, jak działa SVN (lub ogólnie systemy kontroli wersji) warto zacząć od krótkiego artykułu poświęconego temu zagadnieniu.

Musisz mieć zainstalowany program TortoiseSVN (pobierz ze strony).
W artykule będę używał google code. Jeśli chcesz sprawdzać, czy to co tu opisuję jest prawdą, warto założyć tam konto (jeśli masz Gmail to masz automatycznie konto i tu). Opisane szerzej w osobnym artykule. U mnie projekt będzie się nazywał "yc-svn-example". Ty siłą rzeczy będziesz musiał mieć inną nazwę (google code nie zezwala na dwa projekty o tej samej nazwie). Ważne, abyś w miejscu "yc-svn-example" wstawiał nazwę swojego projektu.

import

`import` pozwala na wysłanie plików z naszego komputera.

Zakładam, że masz już założony projekt na google code.

Tworzę katalog "yc-svn-example", a w nim pliki:

  • index.php
  • program.c
  • readme.txt

Celowo stworzyłem pliki różnego typu, aby pokazać, że SVN może być wykorzystywany do wielu rodzajów plików (wliczając w to graficzne, audio, exe itd. Choć uwaga - z plikami binarnymi potrafią dziać się dziwne rzeczy).

Następnie klikam na ikonkę folderu wybieram `Tortoise SVN -> import into', jak na poniższym obrazku:

Import projektu do repozytorium SVN

Import projektu do repozytorium SVN - krok 1

Oraz podaję adres mojego zdalnego repozytorium:

Import projektu do repozytotium SVN - krok 2.

Import projektu do repozytotium SVN - krok 2.

Oraz podaję hasło. Hasło można skopiować ze strony https://code.google.com/hosting/settings (oczywiście, jeśli jesteś zalogowany - zobaczysz swoje ustawienia, a wśród nich hasło).

Import plikow do repozytorium SVN - uwierzytelnianie

TortoiseSVN - import: uwierzytelnianie

Pliki ze wskazanego folderu zostaną zaimportowane do zdalnego repozytorium, o czym użytkownik zostanie poinformowany:

Command: Import D:\youthcoders\yc-svn-example to https://yc-svn-example.googlecode.com/svn/trunk
    Adding: D:\youthcoders\yc-svn-example\readme.txt
    Adding: D:\youthcoders\yc-svn-example\program.c
    Adding: D:\youthcoders\yc-svn-example\index.php
Completed: At revision: 2

Pliki te powinny być widoczne pod adresem: http://yc-svn-example.googlecode.com/svn/trunk/ (u ciebie adres może być inny - w zależności od nazwy projektu).

Jeśli wszystko poszło po twojej myśli, możesz właśnie cieszyć się swoim pierwszym repozytorium!

checkout

Pozwala na pobranie plików ze zdalnego repozytorium na lokalny komputer. Tworzy lokalne repozytorium, dzięki czemu można pracować nad podbranym projektem z wykorzystaniem mechanizmów SVN.

Stwórz katalog o nazwie 'yc-project'. Następnie kliknij na nim prawym przyciskiem i z podręcznego menu wybierz 'checkout':

TortoiseSVN - checkout

TortoiseSVN - checkout

Następnie sprawdź,czy dane są poprawne (adres repozytorium zdalnego oraz lokalny katalog, do którego mają zostać pobrane pliki):

Checkout projektu SVN z repozytorium - krok 2

TortoiseSVN - checkout: pobieranie projektu ze zdalnego repozytorium

Teraz powinna się wyświetlić lista pobranych plików. Gdy odświeżysz katalog, w którym się znajdujesz ikonka katalogu `yc-project' powinna wyglądać podobnie do tej:

Ikonka folderu z projektem

Ikonka folderu z projektem

Oznacza to, że:

  • dany katalog jest podpięty pod system zarządzania wersjami SVN
  • wszystkie pliki lokalnie przechowywane są aktualne (czyli, że nie różnią się od tych na serwerze)

status

Jeśli używasz Tortoise, to nie musisz jawnie wykonywać polecenia `status'. Jest ono wykonywane automatycznie. Ty widzisz jedynie wynik. Na powyższym rysunku widać znak "ok" (tzn. "ptaszek"). Oznacza on, że wszystkie pliki są takie jak ich odpowiedniki na serwerze.
Otwórz teraz folder `yc-project'. Powinieneś zobaczyć coś takiego:

Status lokalnych plikow - identyczne ze zdalnym repozytorium

Status lokalnych plikow - identyczne ze zdalnym repozytorium

Zmiana w pliku

Wejdź do pliku `index.php' i wpisz w nim taki tekst:

<?php echo 'Działa'; ?>

Zapisz plik i odśwież folder 'yc-project'. Powinieneś zobaczyć coś takiego:

Status lokalnych plikow - zmieniony plik

Status lokalnych plikow - zmieniony plik

Dodanie pliku

Dodaj do katalogu 'yc-project' plik o nazwie `nowy.txt'. Po odświeżeniu katalogu powinieneś zobaczyć coś takiego:

Status lokalnych plikow - dodany plik

Status lokalnych plikow - dodany plik

diff

Czasem chciałbyś zobaczyć, co tak naprawdę zmieniłeś w pliku. Wtedy bardzo przydatnym i często wykorzystywanym poleceniem jest diff. Polecenie to wskazuje różnice między plikami - lokalnym i tym ze zdalnego repozytorium. Porównajmy naszą lokalną wersję `index.php' z wersją ze zdalnego repozytorium.

SVN diff

TortoiseSVN - diff

Po chwili (jej długość zależy od wielkości plików i szybkości łącza) zostanie wyświetlony wynik:

Tortoise status - porównywanie plików: wynik porównania

TortoiseSVN - diff: wynik porównania

Jak widać na powyższym obrazku pokazana jest linia, w której nastąpiła zmiana. W tym wypadku dodanie (o czym świadczy znak plusa). W tym wypadku porównanie można byłoby zrobić ręcznie ("ocznie"), ale jeśli plik miałby tysiąc linii, to musisz przyznać, że automatyzacja wydaje się bardzo wygodną opcją 🙂

commit

Pozwala wysłać zawartość lokalnie zmienionego pliku do zdalnego repozytorium. Wyślijmy plik `index.php':

TortoiseSVN - commit

TortoiseSVN - commit

Teraz podajmy jeszcze informację o tym, co zmieniliśmy:

TortoiseSVN - commit: wpisywanie wiadomości

TortoiseSVN - commit: wpisywanie wiadomości

Wiadomość powinna mówić, co zostało zmienione w porównaniu z poprzednią wersją. Później jest to przydatne przy poszukiwaniu błędu i przywracaniu do działającej wersji (obyś nigdy nie musiał się tym zajmować, gdy wszyscy commitują z informacją "moja zmiana" lub "szybki fix").

Po chwili powinniśmy dostać informację, że wszystko jest dodane prawidłowo. Tu czasem może nie być tak różowo. Szczególnie, jeśli natrafimy na konflikty. Ale to jest temat na osobny artykuł.

blame

`blame` jest podobnym poleceniem do`diff'. Pokazuje jednak dodatkowo autora zmian. Blame po angielsku znaczy "oskarż"/"obwin". Pokazuje podobnie jak diff plik, z addnotacją kto dokonał ostani zmian w konkretnej linii:

TortoiseSVN - blame

TortoiseSVN - blame

następnie skonfigurujmy ustawienia:

TortoiseSVN - blame: wybor rewizji

TortoiseSVN - blame: wybor rewizji

poczekajmy chwilę:

TortoiseSVN - blame: operacja w toku

TortoiseSVN - blame: operacja w toku

i sprawdźmy, kto zmieniał jaką linię jako ostatni:

TortoiseSVN - blame: wynik

TortoiseSVN - blame: wynik

Widać, że w tym pliku, za wszystko odpowiedzialny jest użytkownik o loginie Jar.Patryk. Czyli ja 🙂 To by się zgadzało. U Ciebie będzie pewnie inaczej 😉

update

`update` jest poleceniem pozwalającym na pobranie plików ze zdalnego repozytorium. Można powiedzieć, że jest to polecenie komplementarne do `commit` - działa w drugą stronę. W naszym projekcie jest tylko jedna osoba pracująca na jednym komputerze. Tak więc nie zauważysz faktycznego działania. Załączam rysunek, który być może rozjaśni Ci trochę:

TortoiseSVN - update: schemat ogólny działania systwmów kontroli wersji

TortoiseSVN - update: schemat ogólny działania systemów kontroli wersji

Na koniec

To co odpisałem w tym artykule to całkowite podstawy SVN. Tak prosty w obsłudze program jak TortoiseSVN ma jeszcze dużo więcej opcji i możliwości. Popróbuj jednak sam! Na pewno sporo się nauczysz 🙂

Warto też jest założyć sobie - nawet na tym samym komputerze - drugie repozytorium SVN odnoszące się do tego samego projektu. I spróbować edytować oba pliki na raz, wywołując konflikty. Konkflikty, to zgroza SVN. Choć z drugiej strony pomyśleć, że kiedyś nie było automatu, który by nam mówił, że coś zepsuliśmy i trzeba było to robić ręcznie oO.

Warto przeczytać:

Komentarze (0) Trackbacks (1)

Leave a comment