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
merge
nie jest potrzebne, bo wystarczy sampull
. To chyba zależy od rodzaju zmian i tego czy kolidują ze sobą, ale nie jestem pewien