Mercurial – branch w bash prompt

Teraz na szybko ;)
Aby osiągnąć taki efekt:

noose@noose-laptop ~/projekt_1/ (branch)$

należy do .bash_profiles wpisać:

function parse_hg_branch {
    ref=$(hg branch 2> /dev/null) || return
    echo "("${ref#refs/heads/}")"
}
PS1="\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$(parse_hg_branch)$\[\033[00m\] "

źródło: http://railstips.org/blog/archives/2009/02/02/bedazzle-your-bash-prompt-with-git-info/

Mercurial – początki

W robocie zaczynami z mercuriala korzystać (chcemy zakończyć współpracę z svn). Postanowiłem, że spiszę niektóre rzeczy z których korzystamy :)
Teraz będziemy się bawić http://mercurial.selenic.com/wiki/MqExtension (łączenie commitów), więc nie przerażajcie się, że są tutaj totalne podstawy.
A więc zaczynamy od początku:

W katalog domowym tworzymy sobie plik .hgrc (można go także stworzyć w katalogu .hg w projekcie)
Moja aktualna zawartość:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ui]
ignore = /home/pkobylak/.hgignore # plik z warunkami dla ignore
username = Paweł Kobylak <noose@noose.pl> # moja nazwa użytkownika
style = compact # styl na liście - tylko podstawowe informacje

[extensions]
hgext.graphlog = # pozwala pokazywać graficzny log commitów

# potrzebne do mergy - otworzy się vimdiff
[merge-patterns]
** = filemerge

[merge-tools]
filemerge.executable = vim
filemerge.args = -d $local $other

Kilka komend (poniżej jeszcze stawianie serwera):

1
hg init

W miejscu w którym odpalamy – zakłada się repozytorium

1
hg add plik1 plik2

Dodaje plik1 i plik2 do repozytorium

1
hg commit -m 'Komentarz' plik1

Commituje (lokalnie) plik1. Można podać samo hg commit – wtedy spyta się o komentarz oraz zrobić commit wszystkich zmian

1
hg clone http://....

Klonuje repozytorium (taki svn checkout). Przy czym można zrobić clone chociażby z katalogu obok ;)

1
hg pull

Pobiera zmiany ze zdalnego repozytorium (z tego z którego clone robiliśmy)

1
hg pull http://....

Pobiera zmiany z podanego repozytorium (w robocie robimy hg pull ~user/projekt)

1
hg pull -b BRANCH

Pobiera zmiany z repo z danego brancha

1
hg push

Wysyła zmiany do zdalnego repo

1
hg branch NAZWA

Tworzy nowy branch o nazwie NAZWA i wciąga wszystkie zmodyfikowane pliki do niego

1
hg up NAZWA

Robi switch z jednego brancha do drugiego (jeśli istnieje)

1
hg resolve

Rozwiązuje konflikty (odpala przy okazji hg merge)

1
hg glog

Pokazuje graficznie commity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@  6[tip]:3   afa542a627b0 (branch1)   2010-05-20 15:44 +0200   Paweł Kobylak
|    Commit6
|
| o  5   11f79fb03f4b (branch2)   2010-05-20 15:43 +0200   Paweł Kobylak
| |    commit 5
| |
| o  4:1   eb05044a9a79 (branch2)   2010-05-20 15:41 +0200   Paweł Kobylak
| |    commit 4
| |
o |  3   8c6c0b277b88 (branch2)   2010-05-20 15:37 +0200   Paweł Kobylak
| |    commit 3
| |
o |  2   8a7bc16edebf (branch1)   2010-05-20 15:16 +0200   Paweł Kobylak
| |    commit2
| |
| o  1   069476d6234e (branch2)   2010-05-18 14:28 +0200   Paweł Kobylak
|/     commit1
|
o  0   e0f21d6412e7   2010-05-18 10:28 +0200   Paweł Kobylak
     Inicjalizacja

Fajne :)

Stawianie serwera (podstawowego). Nie jest to zalecane bo nie ma autoryzacji itp… Ale jak ma się serwerek w domu czy w małej firmie to w sam raz będzie.

Robimy sobie nowy katalog np ~/repos, zassysamy do niego wszystkie repozytoria do których chcemy mieć dostęp. Następnie tworzymy plik hgweb.config o następującej zawartości:

1
2
3
4
5
6
[collections]
/home/noose/repos/ = /home/noose/repos/ # sciezka do kolekcji repozytoriów

[web]
push_ssl = false # push będzie bez ssl'a
allow_push = * # zezwalamy na push - standardowo jest tylko odczyt

następnie:

1
hg serve --webdir-conf ~/repos/hgweb.config -p 8001 -A /sciezka/do/access_logu -E /sciezka/do/error_logu -d

i wchodzimy na http://localhost:8001 :) następnie się cieszymy, że wszystko chodzi ;]
Każdy developer klonuje z tego miejsca repozytorium:

1
hg clone http://host:8001/projekt

i jest centralne repo :)

niedługo więcej tekstów ;)