Wprowadzenie do systemu kontroli wersji Mercurial
Poniższy tekst jest jedynie wprowadzeniem do pracy z Mercurialem. Osoby które chcą pogłębić swoją wiedzę w zakresie tego tematu – zachęcam do przeczytania darmowej książki dostępnej w Internecie – Mercurial: The Definitive Guide.
Aby pracować na Mercurialu musimy go najpierw zainstalować. Dla systemu Windows Mercurial jest jedną wygodną do zainstalowania paczką. Informację jak zalecam to zrobić pod Ubuntu, zamieściłem tu: Instalacja Mercurial z GUI TortoiseHG pod Ubuntu 9.04.
Konfiguracja wstępna
Zanim rozpoczniemy pracę z Mercurialem, należy w swoim katalogu domowym utworzyć plik .hgrc w którym konfigurujemy swojego użytkownika. Plik ten powinien zawierać następującą treść:
[ui] username = Imie Nazwisko < konto@domena.pl >
Pod Linuxem lub Unixem warto również ustawić zmienną środowiskową EDITOR wskazującą na nasz
ulubiony edytor. W moim wypadku, w pliku .bashrc w katalogu domowym
musiałem dodać na końcu linijkę:
export EDITOR="vim"
W tym momencie możemy już przystąpić do pracy.
Tworzenie repozytorium
Załóżmy, że jesteśmy w katalogu testy.
Utwórzmy w nim plik notatki.txt zawierający jedną linijkę tekstu:
To są moje notatki
Utwórzmy też katalog dokumenty, a w nim umieśćmy plik do-zrobienia.txt zawierający następującą treść:
[ ] Zrobić przelewy za październik [ ] Podać do Energetyki stan licznika
Struktura plików i katalogów wygląda zatem następująco:
user@host testy $ ls dokumenty notatki.txt user@host testy $ ls dokumenty/ do-zrobienia.txt
Możemy w tym momencie utworzyć sobie repozytorium Mercuriala. Przechodzimy zatem do katalogu testy i wydajemy komendę:
user@host testy $ hg init
W katalogu powinien pojawić się podkatalog .hg
Co teraz możemy zrobić? Dostępne komendy pojawią się po wydaniu komendy hg bez parametrów:
user@host testy $ hg Mercurial Distributed SCM basic commands: add add the specified files on the next commit annotate show changeset information by line for each file clone make a copy of an existing repository commit commit the specified files or all outstanding changes diff diff repository (or selected files) export dump the header and diffs for one or more changesets forget forget the specified files on the next commit init create a new repository in the given directory log show revision history of entire repository or files merge merge working directory with another revision parents show the parents of the working directory or revision pull pull changes from the specified source push push changes to the specified destination remove remove the specified files on the next commit serve export the repository via HTTP status show changed files in the working directory update update working directory view start interactive history viewer use "hg help" for the full list of commands or "hg -v" for details
Jeśli chcemy uzyskać większą ilość komend, należy uruchomić polecenie
hg help.
Zobaczmy status naszego katalogu. Możemy napisać hg status, jednak można też zastosować skróconą wersję komendy:
user@host testy $ hg st ? dokumenty/do-zrobienia.txt ? notatki.txt
Widzimy, że system Mercurial widzi dwa pliki. Przed ich nazwami figuruje znak pytajnika, co oznacza, że Mercurial nie do końca wie, co to za pliki.
Dodawanie plików do repozytorium
Do dodawania plików do repozytorium służy komenda hg add [nazwa pliku], przy czym nazwa pliku jest parametrem opcjonalnym. Jeśli jej nie podamy – Mercurial doda wszystkie nieznane pliki w naszym katalogu i podkatalogach do repozytorium.
Dodajmy nasze pliki do repozytorium.
user@host testy $ hg add adding dokumenty/do-zrobienia.txt adding notatki.txt
podglądając status widzimy:
user@host testy $ hg st A dokumenty/do-zrobienia.txt A notatki.txt
Zatwierdzanie i weryfikowanie zmian
możemy w tym momencie zatwierdzić zmiany:
user@host testy $ hg commit
W tym momencie uruchomi się nam edytor w którym uzupełniamy pierwszą linię. Pozostałe zostały zasugerowane przez Mercuriala:
utworzone repozytorium
HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Leave message empty to abort commit. HG: -- HG: user: Imie NazwiskoHG: branch 'default' HG: added dokumenty/do-zrobienia.txt HG: added notatki.txt
Jeśli chcemy którąś z tych linii pozostawić, powinniśmy usunąć HG: sprzed wpisu.
Po zapisaniu pliku, jeśli Mercurial znajdzie choć jedną linię opisu (czyli w naszym wypadku tekst „utworzone repozytorium”), zapisze to jako nową wersję (revision).
Możemy podejżeć zmiany:
user@host testy $ hg st user@host testy $
Jak widać, nie ma żadnych. Zobaczmy zatem historię:
user@host testy $ hg log changeset: 0:996ae301b615 tag: tip user: Imie Nazwiskodate: Tue Oct 13 08:40:12 2009 +0200 summary: utworzone repozytorium user@host testy $
Dokonajmy jakiejś zmiany w pliku dokumenty/do-zrobienia.txt, powiedzmy, że teraz wygląda tak:
[x] Zrobić przelewy za październik [ ] Podać do Energetyki stan licznika
Sprawdzając status widzimy:
user@host testy $ hg st M dokumenty/do-zrobienia.txt user@host testy $
Możemy też podejżeć co zostało zmienione:
user@host testy $ hg diff diff -r 996ae301b615 dokumenty/do-zrobienia.txt --- a/dokumenty/do-zrobienia.txt Tue Oct 13 08:40:12 2009 +0200 +++ b/dokumenty/do-zrobienia.txt Tue Oct 13 08:46:21 2009 +0200 @@ -1,2 +1,2 @@ -[ ] Zrobić przelewy za październik +[x] Zrobić przelewy za październik [ ] Podać do Energetyki stan licznika user@host testy $
Zatwierdzę teraz zmiany, sprawdzę status i historię:
user@host testy $ hg commit user@host testy $ user@host testy $ hg st user@host testy $ user@host testy $ hg log changeset: 1:155c93da6b65 tag: tip user: Imie Nazwiskodate: Tue Oct 13 08:48:01 2009 +0200 summary: aktualizacja changeset: 0:996ae301b615 user: Imie Nazwisko date: Tue Oct 13 08:40:12 2009 +0200 summary: utworzone repozytorium user@host testy $
Usuwanie plików z repozytorium
Teraz usunę plik notatki.txt:
user@host testy $ hg remove notatki.txt user@host testy $ ls dokumenty user@host testy $
Zatwierdzę zmiany i zobaczę historię. Ograniczę sobie przy okazji historię do dwóch najaktualniejszych zmian:
user@host testy $ hg commit user@host testy $ hg log -l 2 changeset: 2:ec95d15664fb tag: tip user: Imie Nazwiskodate: Tue Oct 13 08:51:36 2009 +0200 summary: usunięte notatki changeset: 1:155c93da6b65 user: Imie Nazwisko date: Tue Oct 13 08:48:01 2009 +0200 summary: aktualizacja user@host testy $
Zdecydowałem jednak, że przywrócę plik notatki. Cofnę zatem ostatniego commita komendą rollback, zobaczę jaki
jest status i przywrócę plik notatki.txt:
user@host testy $ hg rollback rolling back last transaction user@host testy $ hg log changeset: 1:155c93da6b65 tag: tip user: Imie Nazwiskodate: Tue Oct 13 08:48:01 2009 +0200 summary: aktualizacja changeset: 0:996ae301b615 user: Imie Nazwisko date: Tue Oct 13 08:40:12 2009 +0200 summary: utworzone repozytorium user@host testy $ hg st R notatki.txt user@host testy $ ls dokumenty user@host testy $ hg revert notatki.txt user@host testy $ ls dokumenty notatki.txt user@host testy $
Myślę, że jako wprowadzenie, taki opis wystarczy
