Tartalomjegyzék

< Linux

Git szerver

Telepítés

A szerveren

  apt-get install git
  apt-get install openssh-server
adduser git
mkdir /home/git/projekt.git
cd /home/git/projekt.git
git init --bare

Egy üres tárolót hozunk létre (--bare kapcsoló; man git-remote).

Vagy egy adott felhasználó ha belép, akkor így dolgozhat:

mkdir -p ~/repo/projekt1.git
cd ~/repo/projekt1.git
git init --bare

A --bare hatására a helyi könyvtár lesz tároló és nem keletkezik egy .git nevű könyvtár.

Webes felület telepítése

apt install gitweb
cp /etc/gitweb.conf /etc/gitweb.conf.eredeti
sed -i s/\\/var\\/cache/\\/home/ /etc/gitweb.conf
a2enmod cgi

A webes felület elérése:

lynx http://servercim/gitweb

A kliens gépen teszt projekt

cd projektem
git init
git add .
git commit -m 'kezdo commit'
git remote add origin git@gitserver:/home/git/projekt.git
git push origin master

A „gitserver” helyett természetesen lehet IP címet is írni.

Automatikus bejelentkezés

su - git
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Kulcs létrehozása:

ssh-keygen -t rsa

Az authorized_keys állományba fel kell venni a publikus kulcsokat.

Tegyük fel, hogy a /tmp könyvtárban vannak a felhasználók publikus kulcsai. Ekkor:

cat /tmp/id_rsa.joska.pub >> ~/.ssh/authorized_keys
cat /tmp/id_rsa.mari.pub >> ~/.ssh/authorized_keys
cat /tmp/id_rsa.kait.pub >> ~/.ssh/authorized_keys

Közös tároló SSH hozzáféréshez

A közös munka másként is megoldható.

A közös munkához közös könyvtár szükséges. A közös könyvtárhoz lehet csoportos unix hozzáférés. A következő példában készítünk egy „fejlesztes” nevű csoportot. Létrehozunk számára a /home könyvtárban egy „fejlesztes” nevű könyvtárat, abban egy projekt1.git könyvtárat. Létrehozunk egy „joska” nevű felhasználót. A „joska” nevű felhasználót betesszük a „fejlesztes” csoportba. Létrehozunk a „projekt1.git” könyvtárban egy Git tárolót. Ezek után a „projekt1.git” könyvtár és tartalmát átadom a „fejlesztes” csoportnak rekurzívan. A „projektek1.git” könyvtár és tartalmának beállítok rekurzívan írási jogot a csoport számára.

addgroup fejlesztes
mkdir -p /home/fejlesztes/projekt1.git
adduser joska
adduser joska fejlesztes
cd /home/fejlesztes/projekt1.git
git init --bare
chgrp -R fejlesztes /home/fejlesztes/projekt1.git
chmod -R g+w /home/fejlesztes/projekt1.git

Innen kezdve, akit felveszek a „fejlesztes” csoportba, azok tudnak feltölteni a projektbe. Az itt bemutatott módszer nem az egyetlen megvalósítható megoldás.

A közös hozzáférés --share kapcsolóval

Készítsünk két szerveroldali tárolót, s1-t és s2-t. Az s1-t egy --bare kapcsolóval készítjük elő, az s2-t a --bare és a --shared kapcsolóval.

$ mkdir server
$ cd server/
$ ls
$ mkdir s1
$ cd s1
$ git init --bare
Initialized empty Git repository in /home/janos/dev/git/server/s1/
$ cd ..
$ mkdir s2
$ cd s2
$ git init --bare --shared
Initialized empty shared Git repository in /home/janos/dev/git/server/s2/
$ cd ..

Nézzük meg mi a különbség a két tároló között:

$ ls -l s1 s2
s1:
összesen 32
drwxr-xr-x 2 janos janos 4096 szept 19 12:13 branches
-rw-r--r-- 1 janos janos   66 szept 19 12:13 config
-rw-r--r-- 1 janos janos   73 szept 19 12:13 description
-rw-r--r-- 1 janos janos   23 szept 19 12:13 HEAD
drwxr-xr-x 2 janos janos 4096 szept 19 12:13 hooks
drwxr-xr-x 2 janos janos 4096 szept 19 12:13 info
drwxr-xr-x 4 janos janos 4096 szept 19 12:13 objects
drwxr-xr-x 4 janos janos 4096 szept 19 12:13 refs

s2:
összesen 32
drwxrwsr-x 2 janos janos 4096 szept 19 12:13 branches
-rw-rw-r-- 1 janos janos  126 szept 19 12:13 config
-rw-rw-r-- 1 janos janos   73 szept 19 12:13 description
-rw-rw-r-- 1 janos janos   23 szept 19 12:13 HEAD
drwxrwsr-x 2 janos janos 4096 szept 19 12:13 hooks
drwxrwsr-x 2 janos janos 4096 szept 19 12:13 info
drwxrwsr-x 4 janos janos 4096 szept 19 12:13 objects
drwxrwsr-x 4 janos janos 4096 szept 19 12:13 refs
$ 

Az s2 tároló csoport szinten kapott ws bitet.

Gitweb a felhasználók számára

Tegyük fel, hogy egy szerveren van három felhasználó: joska, janos, mari. Mindhárom felhasználó a saját könyvtárában hozza létre az egyes projektjei számára a git tárolókat. Jóska például:

mkdir /home/joska/projekt1.git
mkdir /home/joska/projekt2.git

A rendszerben a közös projektek a /home/git/ könyvtárban vannak. Értelemszerűen ez a könyvtár van megjelölve a Gitweb számára, mint weboldalon kiszolgáltatandó projektek könyvtár. Ha Jóska felhasználó projektjeit is szeretnénk kiszolgálni, akkor hozzuk létre a következő linket:

ln -s /home/joska/ /home/git/joska

Innentől kezdve az ő projektjei is megjelennek a webhelyen.

Tegyük fel, hogy Jóska nem szeretné az összes projektéjt a webes felületen közzé tenni. Ekkor készít egy public_git könyvtárat:

mkdir /home/joska/public_git

A public_git könyvtárat linkeljük. A link létrehozása ezek után:

ln -s /home/joska/ /home/git/joska/public_git

Felhasznált források