Mercurial jest rozproszonym, międzyplatformowym systemem kontroli wersji napisanym głównie w języku programowania Python, jakkolwiek udostępnia funkcję diff (porównanie dwóch wersji) w języku C. Głównymi założeniami Mercuriala były: duża wydajność oraz skalowalność oraz zaawansowane możliwości operacji na gałęziach. Twórcą oraz głównym programistą jest Matt Mackall. Kod źródłowy wydany jest na licencji GNU General Public License.
W pliku ~/.hgrc należy ustawić nasz podpis. Jeśli plik nie istnieje, utwórz
go.
[ui]
username = John Doe <john@example.com>
gdzie John Doe zamieniamy na własne imię i nazwisko, a <john@example.com> na
nasz adres mailowy
Głównym poleceniem mercuriala jest hg. Jako pierwszy parametr podaje się akcję
jaką mercurial ma wykonać. Np hg pull lub hg push. Jeśli chcemy uzyskać
pomoc dla tych komend, poprzedzamy je poleceniem help : hg help pull, hg
help push.
Aby móc pracować na istniejącym już repozytorium, należy je sklonować poleceniem
clone
$ hg clone <adres repozytorium z kodem> [<nazwa katalogu docelowego>]
Po co tworzyć nową gałąź? Jeśli chcemy potestować nie brudząc w głównym kodzie, możemy utworzyć kopię źródeł, które w razie potrzeby wcielimy do dowolnej innej gałęzi.
Klonowanie repozytorium realizowane jest za pomocą komendy clone. Ponieważ
klonuje się HEAD musimy przejść do głównego katalogu projektu. Aby sprawdzić
gdzie znajduje się ten katalog, należy wykonać polecenie:
$ hg root
/home/user/myproject
$ cd `hg root`
$ hg clone myproject myproject-test
updating working directory
x files updated, x files merged, x files removed, x files unresolved
Pojawił się nowy katalog o nazwie myproject-test. Wszystkie zmiany w nim
wprowadzone sa oczywiście niewidoczne dla gałęzi myproject.
Zapisywanie zmian odbywa sie w mercurialu za pomocą polecenia commit. Po
wydaniu polecenia
$ hg commit
uruchomiony zostanie edytor gdzie podać należy opis zmian. Ponieważ złą praktyką jest nieopisywanie zmian, hg domyślnie nie pozwala na puste opisy.
Jeśli opis jest krótki, można użyć flagi -m i podać go jako parametr:
$ hg commit -m "Jakiś krótki opis zmian"
Jeśli uznamy że chcemy wysłać swój kod na serwer, wystarczy wydać polecenie
$ hg push <adres serwera>
W zależności od ustawień serwera i mercuriala, możemy zostać poproszeni o podanie loginu i/lub hasła.
Może się okazać, że zmiany wprowadzone w gałęzi roboczej są na tyle dobre, że
warto je dodać do głównej gałęzi projektu. Aby połączyć dwie gałęzi należy użyć
polecenia merge.
Należy pamiętać żeby przed wydaniem polecenia merge należy pobrać projekt do
gałęzi do której ma być dołączony
$ cd myproject-test
# wprowadzam jakieś zmiany, zapisuje
$ cd ../myproject
$ hg pull ../myproject-test
$ hg merge
czasami może się okazać ze
mergenie jest potrzebne, bo wystarczy sampull. To chyba zależy od rodzaju zmian i tego czy kolidują ze sobą, ale nie jestem pewien