Laboratorium 15 System kontroli wersji. Mercurial wraz z Subversion, CVS czy też programem Git należy do grupy aplikacji określanych mianem systemów kontroli wersji. Umożliwiają one sprawną prace wielu programistów nad jednym projektem. W odróżnieniu do Subversion jest zdecentralizowanym systemem kontroli wersji, gdzie nie ma jednego głównego repozytorium (narzuconego przez implementację). Prace nad Mercurialem ruszyły w kwietniu 2005 roku, po tym jak programiści jądra Linuksa postanowili porzucić BitKeepera na rzecz innej aplikacji. Z Mercuriala korzysta opensolaris, XEN, OLPC, projekt ALSA, e2fsprogs i wiele innych. Aplikacji przyświecają dwa cele - prostota obsługi i wydajność. Geneza słowa Mercurial, który nazywany jest również Hg, nawiązuje do słowa rtęć (HG), jako że w języku angielskim Mercury oznacza rtęć. Linux instalacja Mercurial znajdziemy w repozytoriach pakietów większości dystrybucji, a jeżeli go brak to wystarczy pobrać źródła ze strony projektu. Mercurial napisany jest w Pythonie z niewielkim dodatkiem C. Instalowanie "ze źródeł" to wydanie polecenia: Windows instalacja Program można pobrać ze strony: python setup.py install http://mercurial.selenic.com/wiki/download Do wyboru mamy wersje instalacyjne na większość współczesnych systemów operacyjnych (rys.21).
Rys.21 Wersje instalacyjne programu Mercurial. Warto dla wyższego komfortu późniejszej pracy rozważyć instalację pokazaną na poniższym rysunku 22. Rys.22. Zaznaczona pierwsza opcja umożliwia instalację programu integrującego się z powłoką Windowsa.
Po instalacji mamy do dyspozycji: repozytorium (ang. repository) - katalog zawierający historię mojego projektu. Wszystkie czynności zachodzą w repozytorium, każdy użytkownik ma własne, katalog roboczy (ang. working directory) - kopia (ang. snapshot) repozytorium o określonej wersji/rewizji. Zawartość można edytować, a zmiany zapisane zostaną gdy prześlę je do repozytorium (ang. commit), rewizja (ang. changeset) - stan projektu w danym czasie. Określa autora rewizji, opis zmian, listę zmodyfikowanych plików, gałąź (ang. branch) - dwie lub więcej rewizji posiadających tą samą rewizję-matkę. Normalnie repozytorium przedstawia kod bieżący. Gdy chcemy np. wydać kilka wersji naszego programu tworzymy gałęzie, np. "program ver1.0", "program ver2.0". Każda gałąź zachowuje niezależność (jeżeli programista tego chce) i umożliwia np. łatanie kodu programu w wersji 1.0 niezależnie od 2.0 czy kodu bieżącego (ang. head). Gałęzie często są również tworzone w celu dodania lub edycji dużych ilości kodu w aplikacji, co wiąże się z niedziałającą aplikacją do czasu dokonania wszystkich zmian. Stworzenie gałęzi powoduje że bieżący kod nie jest "niszczony" i inni programiści mogą pracować. Gdy duże zmiany są gotowe łączy się gałąź zawierającą te zmiany z główną gałęzią. Praca z Mercurialem. Wybierz plik lub katalog, który chcesz wersjonować. Wskaż go prawym przyciskiem myszki i wybierz opcje : Create Repository Here (Rys.23).
Rys.23. Widok tworzenia repozytorium a) b) Rys.23 a. Widok wyboru ścieżki dostępu do repozytorium repozytorium, Rys.23 b. Potwierdzenie poprawnie założonego repozytorium.
Utworzenie jakiegokolwiek pliku wewnątrz katalogu (rys 24) nie powoduje jeszcze automatycznego dodania go do repozytorium. W celu dodania należy wskazać go prawym klawiszem myszy i wydać polecenie Add (rys 25). Rys.24. Widok ikony katalogu repozytorium (z wyraźnym emblematem programu). Rys.25. Dodanie pliku do repozytorium. Wybranie opcji add spowoduje, że plik zmieni swoja ikonę dodając znak +. Oznacza ona, że plik jest gotowy do dodania do repozytorium. Ale nie zostanie dodany dopóki nie zostanie wykonana operacja zatwierdzenia, czyli commit. Commit można przeprowadzić klikając jak na rysunku 25 lub po wyjściu, w dowolnym miejscu folderu prawym przyciskiem myszki i wybierając opcję Hg commit dostępną w głównym menu.
Rys.26. Dodanie pliku do repozytorium, wraz z informacją o numerze gałęzi oraz częściowym podglądem zawartości pliku. Następnie możliwe jest wprowadzenie do pliku zmian jego zawartości (w dowolnym edytorze, środowisku programistycznym) i zapisanie go Widok katalogu zmieni się na : Rys. 27. Widok ikony katalogu projektu po zmianie. W podglądzie pliku pojawią się informacje o zmienionych liniach pliku. Pokazano to na rysunku 28: - kolorem czerwonym pokazano poprzednią wartość linii a + kolorem zielonym bieżącą. Precyzyjniej rzecz ujmując: nowe linie są oznaczone kolorem zielonym, a usunięte kolorem czerwonym.
Rys. 28. Widok zmian w przykładowym pliku. Wskazując plik i wybierając z zakładki TurtoiseHg opcję RevisionHistory widzimy historię zmian w naszym przykładowym pliku (rys 29). a) b) Rys. 29. Widok historii zmian zawartości pliku. W widoku Workbench (prawy klawisz myszy na KATALOGU: Projekt M-Sklep_interentowy ) możliwy jest powrót do poprzedniej lub dowolnie innej wersji. Można to wykonać naciskając Aktualizuj (rys.30 i rys.31)
Rys.30. Widok wersjonowania Rys.31. Widok umożliwiający powrót do pierwszej wersji. Powrót do poprzedniej lub innej (wybranej) zmiany następuje poprzez wskazanie jej w oknie widoku historii i wybór
Opis bardziej zaawansowanych funkcji programu Marcurial dostępny będą na platformie e- learningowej. Problem praktyczny1. Zbadaj jakiego typu pliki można wersjonować za pomocą programu Mercurial. Proszę wypróbować pliki z pakietu: pliki program Open Office (zapis ODT i XML), pliki program MS Office, pliki tekstowe, pliki grafiki rastrowej, pliki grafiki wektorowej, pliki MS Visio, pliki program Visual Paradigm Pliki kody źródłowe Delphi Pliki kody źródłowe C/C++ Pliki kody źródłowe ASP.NET Pliki kody źródłowe C# Pliki kody źródłowe Visual Basic.NET oraz inne podane przez prowadzącego laboratorium