Git

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

GIT je moderní SCM systém, který byl původně vytvořen pro správu zdrojových kódů linuxového jádra.[1]

Klienti

Linuxový klient git-core
Klient msysgit na MS Windows XP

V linuxu je klient pro práci gitem ovykle součástí distribuce. Klienta pro MS Windows si můžete stáhnout z http://sourceforge.net/projects/gitextensions/.

Alternativní klient pro Windows je ke stažení z http://code.google.com/p/msysgit/. Tento klient umožňuje jak práci v CLI (příkazová řádka) tak i GUI (grafické rozhraní). Jak se můžete přesvědčit z přiložených screenshotů spouští se a vypadána linuxu i MS Windows podobně

Velmi slibně vypadá nástroj TortoiseGIT (obdoba TortoiseCVS a TortoiseSVN) pro Windows: http://code.google.com/p/tortoisegit/

Manuálů jak pracovat s gitem se válí po internetu celá řada..

Vytvoření git serveru

Pro zpřístupnění gitu přes www server apache je třeba následující postup:

Na straně www serveru

1
Na stroji musí být nainstalován balík git-core a pro apache povolen webdav
Poznámka
root@server:~# apt-get install git-core
root@server:~# a2enmod dav dav_fs
2
Vytvoří se adresář do kterého budou cpát klienti změny, a pak se pro tento adresář aktivuje git a aby mohli přistupovat do tohoto adresáře klienti přes webdav, musí se nastavit příslušná práva pro web server
Poznámka
root@server:/var/www/accesscontrol.git# git --bare init
Initialized empty Git repository in /var/www/accesscontrol.git/
root@server:/var/www/accesscontrol.git# chown -R www-data.www-data .
3
Pak se pro tento adresář nastaví konfiguračním souborem /etc/apache2/conf.d/git.conf webDAV
Poznámka
<Location /accesscontrol.git>
    DAV on
</Location>
4
Pokud chcete mít přístup do adresáře chráněný autorizací, rozšíříte tento konfigurační soubor o další volby..
Poznámka
<Location /accesscontrol.git>
    DAV on
    AuthType Basic
    AuthName "Git"
    AuthUserFile /var/www-pass/accesscontrol.pwd
    Require valid-user
</Location>
5
..a vytvoříte odpovídající soubor /var/www-pass/accesscontrol.pwd
6
Potom znovu načtete konfiguraci vašeho web serveru
Poznámka
root@server:~# /etc/init.d/apache2 force-reload
Upozornění Po předání změn z klienta na server (příkaz push) je na straně serveru třeba spoustit v repozitáři příkaz git-update-server-info. Aby nebylo nutné se na server přihlašovat a spouštět tento příkaz manuálně, je třeba nastavit soubor post-update v podadresáři hooks dát mu právo ke spouštění a také umožnit přístup serveru do souboru refs v podadresáři info.
root@server:/var/www/accesscontrol.git# mv hooks/post-update.sample hooks/post-update
root@server:/var/www/accesscontrol.git# chmod +x hooks/post-update
root@server:/var/www/accesscontrol.git# chown -cR www-data.www-data info/refs

Pochopitelně, pokud váš server běží pod jiným uživatelem, tak je třeba nastavit přístup pro něj.

Na straně klienta

Test dostupnosti repository

Předtím, než provedete první commit, je záhodno otestovat dostupnost repozitory z klientského počítače. Pro tento účel lze použít nástroj curl, který umožňuje s parametrem -v podrobnější výpis. Z něj lze pak zjistit příčinu ev. problému v připojení.

Zkuste si jím vypsat obsah souboru HEAD na straně repozitory.

user@klient:~/accesscontrol-git# curl --location -v http://<login>:<password>@<server>/accesscontrol.git/HEAD

Abyste se vyhnuli použití přihlašovacího jména a hesla na příkazové řádce, můžete k autorizaci využít soubor ~/.netrc

user@klient:~/accesscontrol-git# curl --netrc --location -v http://<server>/accesscontrol.git/HEAD
ref: refs/heads/mediawiki

Pokud je vše v pořádku, tak se vám vypíše obsah souboru HEAD na straně repozitory. V případě že je nějaký problém, tak z chybové stránky máte šanci zjistit kde hledat příčinu.

První commit

Při prvním commitu do prázdné repozitory je třeba použít parametr --all

user@klient:~/accesscontrol-git# git push --all http://<login>:<password>@<server>/accesscontrol.git


U dalších commitů již není nutný. Aby nebylo nutné pokaždé zadávat celé URL vzdáleného repozitáře, můžete cestu včetně autorizace nastavit přímo v lokální repository.


user@klient:~/accesscontrol-git# git config remote.origin.url http://<login>:<password>@<server>/accesscontrol.git/


Při dalších commitech pak už stačí pouze..


user@klient:~/accesscontrol-git# git push


Problémy a jejich řešení

Upozornění Git verze 1.5.6 a 1.6.0 neumí zapisovat (push) na http repozitáře na tomto serveru. Verze 1.6.1 a vyšší jsou OK. Tato chyba se projevuje následující chybovou hláškou:
Unable to create branch path http://login:pass@support.dce.felk.cvut.cz/git/repo.git/info
Error: cannot lock existing info/refs
error: failed to push some refs to 'http://login:pass@support.dce.felk.cvut.cz/git/repo.git'


PUT error: curl result=22, HTTP code=403
Chyba je na straně repository v souboru info/refs S největší pravděpodobností buď chybí, nebo má špatně nastavená práva.

Viz také

Seriál video návodů na práci s GITem v příkazové řádce

Přehledný tahák nejčastějších operací v GITu

Seriál na root.cz

  1. http://www.root.cz/clanky/git-distribuovana-sprava-revizi/
  2. http://www.root.cz/clanky/git-sprava-repositaru/
  3. http://www.root.cz/clanky/git-config-commit-e-mail-a-browsing/
  4. http://www.root.cz/clanky/git-nase-prvni-vydani/

Oficiální stránky