GIT je v súčasnej dobe jedným z najrozšírenejším verziovacím systémom. Teda nebudeme si klamať GIT je najlepší keďže ho využívajú veľké projekty a sú s nim spokojné. Skúsime si rozbehať vlastný verejný GIT server, ktorý bude dovoľovať anonymným používateľom klonovať a pullovať zdrojový kód(pushovanie kódu je implicitne zakázané). Tento GIT server nemá v sebe zahrnutú autentifikáciu používateľov a ani sa nedá žiadnym spôsobom zapnúť. Pre autentifikáciu používateľov je nutné použiť iný spôsov ako WebDAV, SSH alebo gitolit
Inštalácia a spustenie GIT serveru
Pre fungovanie celeho repozitara nám budú postačovat dva balíky git a git-core.
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get git git-core
Po nainštalovaní GITu si musíme vytvoriť adresár, do ktorého budeme vkladať naše repozitáre upredňostňujem nepoužívať prednastavenú lokáciu, ktorou je /var/cache/git, ale použiť niečo vlastné ako /home/git. Snažím sa používať adresár home na všetky datové úložiska ako je SVN, GIT, webové projekty z toho dôvodu, že ked preinštalujete systém všetky data vám zostanú. Samozrejme disk musí biť rozdelený správne. To znamená dve partície. Prvá partícia s boot príznakom na koreň / a druhá partícia na /home. Potom pri zálohovaní vám bude postačovať ukladať celý home adresár.
Teraz si spustíme GIT démona, ktorého sme si nainštalovali s balíčkom git-server. Nastavíme mu cestu ku repozistárom, v našom prípade /home/git. Atribút detach znamená, že príkaz sa spustí na pozadí teda vieme ďalej pokračovať v práci v terminály. Syslog nám bude zaznamenávať logy do /var/log/syslog. export-all dovoli pullovať všetky adresáre, ktoré majú GIT objekt(adresár .git).
git daemon --base-path=/home/git --detach --syslog --export-all
Vytvoríme si náš prvý GIT repozitár cez príkaz git init a vytvoríme si aj nejaký testovací obsah, ktorý commitneme do repozitára. Dúfam, že je jasné, že nevieme spraviť push.
$ cd /home/git $ git init project $ cd project $ touch ahoj.txt | echo "Testovaci obsah" > ahoj.txt $ git add ahoj.txt $ git commit -a -m "Prvy commit"
Na strane klienta si môžeme naklonovať projekt z nášho GIT serveru. Ako som vyššie spomenul anonymní používatelia nie sú schopný pushovať svoje vlastné zmeny keďže tento jednoduchý GIT server v sebe nezahŕňa žiadnu podporu pre autentifikáciu používateľov.
$ git clone git://server/project
Problémy, ktoré môžu nastať
Hneď prvú vec, ktorú som potreboval zistiť je či naozaj GIT server beží alebo nie. Prvý krok je použítie utility nmap, ktorá nám preskenuje porty a zistí aké služby na jednotlivých portoch počúvajú. Náš GIT server počúva na porte 9418.
$ nmap localhost Starting Nmap 5.00 ( http://nmap.org ) at 2011-08-12 11:16 CDT Interesting ports on localhost (127.0.0.1): Not shown: 992 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 3306/tcp open mysql 9418/tcp open unknown # TOTO JE GIT SERVER Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
Ďalší spôsob ako prísť na to či GIT server beží je, že si dáme vypísať bežiace procesy. Môže sa stať, že omylom spustíme dva procesy GIT serveru vtedy nepotrebný proces ukončíme použitím príkazu kill -9 číslo procesu
$ ps xaf | grep git 13351 pts/0 S+ 0:00 \_ grep git 13174 ? Ss 0:00 git-daemon --base-path=/home/git --detach --syslog --export-all
Ak sa nám podarí spustiť server so zle nakonfigurovanou cestou k repozitárom dostaneme nižšie vypisanú chybu pri pokuse o klonovanie adresáru. Na odstránenie tejto chyby stačí ak vypneme proces serveru a znovu ho spustíme s dobre nastaveným parametrom –base-path.
$ git clone git://server/project.git Cloning into project... fatal: The remote end hung up unexpectedly