System kontroli wersji Mercurial. Ćwiczenie

Aleksander Denisiuk


Spis treści

System kontroli wersji Mercurial

Abstrakt

Celem ćwiczenie jest zapoznanie się z system kontroli wersji Mercurial. Ćwiczenie zostało opracowane na potrzebę projektu zespołowego

Najnowsza wersja tego dokumentu dostępna jest pod adresem http://wmii.uwm.edu.pl/~denisjuk/uwm

System kontroli wersji Mercurial

Dodaj swoje nazwisko do projektu początkowego, połącz swoje repozytorium z kolegą oraz z moim repozytorium

Ćwiczenie 1: Ustawienie danych identyfikacyjnych użytkownika

Utwórz plik ~/.hgrc (dla Windows %HOME%\.hgrc) ze swoimi danymi, korzystając ze wzorca:

    [ui]
    username = John Doe <john@example.com>
   

W plikju hgrc nie powiino być odstępów na początku linii. Jeden ze sposobów na utworzenie i edycję nowego pliku"

    nano ~/.ghrc
   

Czy już wiesz, co oznacza tylda?


Ćwiczenie 2: Pobranie wersji początkowej projektu

Pobierz wersję początkową projektu, zwierającą plik Dokumentacja.xml:

    hg clone http://IP.ADRES:8000/hg/projekt my-projekt
   

project to jest nazwa twojego projektu na moim komputerze, dopilnuj, żeby wiżą swój projekt. my-project to jest nazwa (nowego) katalogu z projektem na twoim komputerze. Można podać ścieżkę. Zaleca się wybrać nazwę według swojego gustu.


Ćwiczenie 3: Wprowadzenie zmian

  1. Dodaj do pliku Dokumentacja.xml dane o swojej osobie
  2. Sprawdź poprawność dokumentu poleceniem make (dla Windows należy użyć polecenia xsltproc.exe c:\docbook\xsl\html\chunk.xsl Dokumentacja.xml (możliwe, że trzeba będzie podać całą ścieżkę do xsltproc))
  3. Wprowadź zmiany do lokalnego repozytorium (commit).

Ćwiczenie 4: Synchronizacja repozytoriów

  1. Żeby nie tworzyć wiele gałęzi przed synchronizacją zrób commit. (Polecenie status pozwala zobaczyć bieżący status plików.)

    Zsynchronizuj zwoje repozytorium z repozytorium kolegi (pull). W twoim repozytorium zostanie utworzono dwie wersje.

  2. Udostępnij swoje repozytorium do synchronizacji koledze (hg serve, repozytorium będzie dostępne na porcie 8000 przez http).
  3. Połącz wersje w swoim repozytorium (merge).

Ćwiczenie 5: Rozwiązanie kolizji

Przy połączeniu wersji czasami nie ma możliwości połączyć wersje automatycznie. Na przykład, gdy w nich jednocześnie zostały zmienione te same linijki kodu. Taka sytuacja nazywa się kolizją. Przykładowa kolizja (po poleceniu merge) pokazana na poniższym rysunku:

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article [
    <!ENTITY nazwa     "Nazwa projektu">
    ]>
      <article lang="pl">
<articleinfo>
  <title>Dokumentacja Projektu <citetitle>&nazwa;</citetitle></title>
  <author>
<<<<<<< local
  <firstname>Aleksandra</firstname>
  <surname>Kowalska</surname>
=======
  <firstname>Aleksander</firstname>
  <surname>Kowalski</surname>
>>>>>>> other
  </author>
</articleinfo>
</article>

Żeby rozwiązać kolizję, należy z dwóch wersji utworzyć jedną. Przykład połączenia wersji podany jet niżej:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article [
  <!ENTITY nazwa     "Nazwa projektu">
  ]>
<article lang="pl">
<articleinfo>
    <title>Dokumentacja Projektu <citetitle>&nazwa;</citetitle></title>
    <author>
      <firstname>Aleksandra</firstname>
      <surname>Kowalska</surname>
    </author>
    <author>
      <firstname>Aleksander</firstname>
      <surname>Kowalski</surname>
    </author>
  </articleinfo>
</article>

Po połączeniu i weryfikacji połączonej wersji, należy zaznaczyć kolizję jako rozwiązaną:

      hg resolve -m Dokumentacja.xml
   

Po rozwiązaniu kolizji należy zrobić commit do repozytorium. Powstały plik Dokumentacja.xml.orig może być usunięty ręcznie.

Istnieją narzędzia (w tym graficzne) do połączenia wersji na etapie merge. Przykładowo, użytkownik może pojąć decyzję którą z trzech wersji (starą, lokalną lub obcą należy zastosować w każdej kolizji. Przy użyciu takich narzędzi w połączonym pliku nie będzie znaczników wersji, jak w naszym przykładzie. Po połączeniu wersji z użyciem takich narzędzi pomocniczych także należy zweryfikować połączoną wersję i zrobić commit

  1. Rozwiąż powstałe kolizje
  2. Sprawdź połączony plik (poleceniem make)
  3. Zaznacz kolizję jako rozwiązane
  4. Zakomituj połączoną wersję do repozytorium
  5. Dowiedz się z Internetu, jakie programy pomocnicze do łączenia wersji są dostępne dla twojego systemu operacyjnego

Uwaga.

Gdyby nie zmieniałaś swojego repozytorium przed pull, nie było by utworzono dwóch wersji, dla aktualizacji projektu trzeba by było zrobić update. Przy update'owaniu także mogą powstać kolizje, które należy rozwiązać w sposób analogiczny.

Ćwiczenie 6: Dalsze zmiany

  1. Dodaj do projektu nowy rozdział, w oddzielnym pliku.
  2. Upewnij się, że dokument kompiluje się poprawnie
  3. Zsynchronizuj swoje repozytorium z dwoma innymi (jeżeli masz zespół dwuosobowy, to wymuście, aby każdy miał okazję rozwiązać kolizję)

Ćwiczenie 7: Synchronizacja z moim repozytorium

Żeby zsynchronizować swoje repozytorium z głównym (na moim komputerze), należy wysłać do niego zmiany. Jednak w moim repozytorium nie wolno robić nowych gałęzi. Więc synchronizacja powinna się odbywać w dwa etapy:

  1. Pobranie zmian z mojego repozytorium (pull) z ewentualnym rozwiązaniem kolizji.
  2. Wysyłanie zmian do mojego repozytorium (push).

Zwróć uwagę, że przy synchronizacji z moim repozytorium można w wierszu poleceń nie podawać jego adresu. Czemu? (Podpowiedź: zajrzyj do pliku .hg/hgrc)

  1. Zsynchronizuj swoje repozytorium z repozytorium głównym (na moim komputerze)
  2. Zobacz historię projektu (log)

Ćwiczenie 8: Drzewo historii projektu

Zobacz graficzne drzewo historii projektu.


Ćwiczenie 9: Mercurial Hostings

Zobacz listę serwerów, które hostingują projekty w Mercurial. Może wasz zespół zechce założyć konto na jednym z takich hostingów?


Ćwiczenie 10: Inne podobne systemy

Znajdź informację o co najmniej dwóch innych podobnych systemach. Jakie to systemy?


Ćwiczenie 11: Graficzny interfejs

  1. Czy istnieje interfejs graficzny dla Mercuriala?
  2. Jakie są narzędziea graficzne do rozwiązania kolizji?