Ćwiczenie do Subversion.

Ćwiczenie to opracowane zostalo przez mgr inz. Jaroslawa Koszuka.

Dla celów laboratorium dostępne jest do ćwiczeń repozytorium testowe pod adresem https://serce.ics.p.lodz.pl/svn/test/ (tam będzie można sprawdzać wszystkie przez stronę wszystkie zmiany przeprowadzane przez nas i aktualną wersję projektu w rpozytorium). Istnieje tam 30 kont o loginach: test1, test2, ..., test30. Wszystkie mają takie samo hasło: test. Ćwiczenie to składa się z następujących kroków:

  1. Wybrać sobie dwa loginy. Dalej będziemy przyjmować, że są to: test1 i test2 (w dalszej części należy zamienić te nazwy na własne wybrane loginy).
  2. Utworzyć na dysku katalog, w którym będziemy pracować (postarać się aby nazwa była w miarę unikalna gdyż na repozytorium tym to ćwiczenie może wykonwać na raz wiele osób). Dalej zakładać będziemy, że będzie się on nazywać: proba (w dalszej części należy zamienić tę nazwę na własną wybraną nazwe katalogu). W katologu tym utworzyć plik readme.txt, w którym umieścić należy dane osób wykonująych zadanie.
  3. Rozpocząć pracę z Sybversion przez zaimportowanie katalogu proba na serwer przez wydanie polecenia:

    svn import --username test1 -m "Wstepny import katalogu grupy." proba https://serce.ics.p.lodz.pl/svn/test/proba

  4. Skasować z dysku katalog proba.
  5. Wyciągnąć (tzw. checkout) do pracy wrzucony katalog z repozytorium do katologu o lokalnej nazwie proba1 (dodać 1 do nazwy katalogu) za pomocą polecenia:

    svn co --username test1 https://serce.ics.p.lodz.pl/svn/test/proba proba1

  6. Dodać w katalogu proba1 plik hallo.ccp z kodem programu wypisującym na ekranie napis Hallo world!.
  7. Dadać ten plik do projektu objętego kontrolą Subversion:

    svn add hallo.cpp

  8. Zatwierdzić (tzw. commit) wprowadzone zmiany wrzucając aktualną wersję na serwer:

    svn ci -m "Dodany program Hallo world"

  9. Wykonać zaktualizowanie lokalnej wersji do aktualnej wersji na serwerze (istotne gdyby zaszły tam jakieś zmiany) poleceniem:

    svn up

  10. Korzystając z drugiego loginu (tu test2) wyciągnąć (checkout) z repozytorium raz jeszcze ten katalog tym razem jednak do katalogu proba2 (dodać 2 do własnej nazwy katalogu). W ten sposób powinny być lokalnie dwie wersje tego samego katalogu na dysku lokalnym, w różnych katalogach i wyciągnięte przez różnych użytkowników).
  11. Wprowadzić w pliku hallo.cpp w obu katalogach zmiany nienachodzące na siebie tj. występujące w różnych linijkach. Za każdym razem sprawdzić czy program się kompiluje (nie powinno się wrzucać wersji nie działających)!
  12. Wykonać zatwierdzenie zmian (commit) kolejno w obu katalogach. Przy drugim zatwierdzeniu powinno się to nie powieść ze względu na fakt, że przed chwilą dokonaliśmy tam zatwierdzenia zmian z pierwszego katalogu.
  13. Rozwiązać powyższy problem wydając polecenie, które zaktualizuje nasz lokalny stan do stanu na serwerze. W pliku naszym powinny zostać naniesione zmiany z serwera, a nasze zmiany lokalnie wykonane nie powinny być naruszone (sprawdzić to!). Jest to możliwe gdyż zmiany wprowadzone w obu plikach nie nachodziły na siebie. Aktualizacji dokonać poleceniem:

    svn up

  14. Sprwdzić czy powstały program się kompiluje i jeśli tak spróbować powtórnie dokonać zatwierdzenia (już połączonych) na serwerze zmian w drugim katalogu. Tym razem powinno być to możliwe (no chyba, że zmieniły tam w międzyczasie coś jakieś osoby trzecie :)).
  15. W katalogach obu dokonać znów aktualizacji wersji z servera (svn up). Jest to dobry zwyczaj aby wykonywać to przed każdym rozpoczęciem dalszej pracy.
  16. Wprowadzić w obu katalogach w pliku hallo.cpp zmiany tym razem w ten sposób aby nachodziły na siebie tzn. np. w jednej tej samej linijce.
  17. Powtórzyć czynności jak poprzednio. Tym razem nie powinno nam się jednak udać zaktualizować lokalnej wersji do wersji z serwera gdyż zmian tych nie da się połączyć w sposób przezroczysty dla użytkownika. Mówi się wówczas, że nastąpił konflikt, który należy rozwiązać. Po wykonaniu polecenia svn up tym razem powinny się pojawić dodatkowe pliki, które przedstawiają między innymi wersję jaka jest na serwerze, wersję jaką my mieliśmy przy ostatnim pobieraniu z serwera oraz wersją z naszymi lokalnymi zmianami. Dodatkowo w pliku, w którym nastąpił konflikt specjalnie zaznaczone są miejsca gdzie ten konflikt nastąpił i z jakich przyczyn. Należy samemu dokonać modyfikacji w tym pliku hallo.cpp, które usuwają konflikt, a następnie powiadomić system, że konflikt został usunięty za pomocą polecenia:

    svn resolved hallo.cpp

  18. Po rozwiązaniu konfliktu (dodatkowe pliki powinny zniknąć) zatwierdzić (commit) aktualne zmiany na serwerze.