GIT HOWTO – Instalacja, Konfiguracja, Użytkowanie cz.1
Jakiś czas temu pomyślałem że przydałoby zacząć używać jakiegoś softu do kontroli wersji. Od czasu do czasu napiszę jakiś program, większość z nich służą jako “ułatwiacze” w mojej pracy admina, niektóre za to tworzone są tylko dla rozrywki i czasami giną w mroku dziejów.
Z ciekawszych wspomnę mini sieć p2p napisaną przeze mnie w w perlu i netcacie (byłem wtedy takim noobem ze nie potrafilem używać TCP/UDP spod perla), która nawet działała, potem ją popsułem a że nie miałem żadnego VCS (version control system) to zaginęła. (Część druga)
Ale do rzeczy. Po przejrzeniu netu uznałem że GIT będzie dla mnie najlepszy, wyglądał sensownie i (podobno) ma dużo plusów w porównaniu do CVS/SVN. Po krótkim googlowanku zdecydowalem się na serwer Gitosis.
Jako że jest to serwer gita to jest także hostowany na gicie, więc instalujemy klienta gita ( w debianie git-core ) i gitosis
`# git clone git://eagain.net/gitosis.git
cd gitosis
./setup.py install`
(soft jest w pythonie w debie wymaga python-setuptool. Lub można po prostu zainstalowac gitosis także z paczki)
Tutaj powinienem chyba napisać jak działa gitosis. Otóż gitosis używa ssh i autentykuje się z klientami przez klucze publiczne, działa to tak:
1.Gitosis ma swoje konto w systemie i klient loguje się przez autentykacje kluczem publicznym (~/.ssh/authorized_keys jest automatycznie zarządzane przez gitosis)
2.następnie na podstawie tego który klucz został użyty klient ma odpowiednie prawa do repozytorów
System w sumie prosty ale niezbyt trudny do zarządzania i skuteczny ;]. Ale idziemy dalej,
Tworzymy konto systemowe:
adduser --system --shell /bin/sh --gecos "Gitosis" --group --disabled-password --home /home/git git
Oczywiście równie dobrze możemy nazwać konto “ciastko”. Na konto nie będzie można się “normalnie” (–disabled-password) zalogować, tylko poprzez su albo klucz publiczny (ale gitosis dodaje je w taki sposób że dozwolone jest tylko odpalenie gitosis przez tak zalogowane konto).
Od tej pory będzie nam potrzebny nasz własny klucz publiczny(ssh-keygen -t rsa
).
`
su git
$ cd
$ gitosis-init < /nasz/pubkey.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
$ chmod 0755 ~/repositories/gitosis-admin.git/hooks/post-update
Ostatnia linijka jest ważna! Z jakiegoś powodu ten plik nie ma +x domyślnie a bez tego config nie chce się aktualizować przez git.
w tym momencie mamy stworzone repo z configiem i działający serwer, teraz tylko dodać inne repa ;]. Jako że config jest jednocześnie repozytorium, odpalamy na lokalnym (z zainstalowanym git-core) kompie:
$ git clone ssh://git@some.whe.re/gitosis-admin.git
Initialized empty Git repository in /home/xani/gitosis-admin/.git/
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4⁄4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5⁄5), done.
powstanie nam katalog z plikami konfiguracyjnymi gitosis, plik* gitosis.conf* odpowiada za uprawnienia do repo, wygląda on tak:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = xani@death
[group configwatch]
writable = configwatch
members = xani@death some.other@key @somegroup
[repo configwatch]
description = Some Repo
owner = Some Company
`
Kursywą zaznaczyłem przykładowe dodane repo. w [group] writable oznacza gdzie dana grupa może pisać, [members] ofc oznacza członków grupy, a gdy zaczyna się od @ oznacza inna grupę. Oprócz tego żeby dodac nowego usera trzeba też zapisać jego klucz publiczny w configu, zapisujemy go pod keys/nazwa@host.pub. Ok, teraz update configa.
<br />
$ git add gitosis.conf<br />
$ git add "keys/some.other@key.pub"<br />
$ git commit<br />
[master dad67d6] added user<br />
2 files changed, 8 insertions(+), 0 deletions(-)<br />
create mode 100644 keydir/xani@hydra.pub<br />
$ git push<br />
Counting objects: 7, done.<br />
Compressing objects: 100% (4/4), done.<br />
Writing objects: 100% (4/4), 462 bytes, done.<br />
Total 4 (delta 0), reused 0 (delta 0)<br />
To ssh://git@devrandom.pl/gitosis-admin.git<br />
58ab44a..dad67d6 master -> master<br />
Pierwsze dwie linijki dodają pliki do commita (i repo), kolejna wysyła zmiany do lokanego repo ( i pyta się o komentarz), a na końcu git push wysyła zmiany na serwer. W git push dostaniesz tez prawd. warning, zrób więc git config push.default current
Ok, mamy już nowego userka i uprawnienia, czas stworzyć wreszcie repo. Zrobimy to przez utworzenie repa lokalnie a następnie wysłanie go na serwer
<br />
$ mkdir configwatch<br />
$ git init<br />
Initialized empty Git repository in /home/xani/configwatch/.git<br />
$ git commit --allow-empty<br />
$ git remote add origin ssh://git@devrandom.pl/configwatch.git<br />
$ git push origin master<br />
Initialized empty Git repository in /home/git/repositories/configwatch.git/<br />
Counting objects: 2, done.<br />
Writing objects: 100% (2/2), 161 bytes, done.<br />
Total 2 (delta 0), reused 0 (delta 0)<br />
To ssh://git@devrandom.pl/configwatch.git<br />
* [new branch] master -> master<br />
I to tyle (na razie), w następnej części opis podstawowych komendter