< Linux

Git szerver

Szerző: Sallai András

Copyright © Sallai András, 2014, 2015, 2020

Licenc: GNU Free Documentation License 1.3

Web: https://szit.hu

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

http://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server (2014-11-06)

http://askubuntu.com/questions/12647/setting-up-a-git-server (2015-06-06)

https://rwehner.wordpress.com/ (2015-06-06)

https://www.linux.com/learn/tutorials/824358-how-to-run-your-own-git-server (2015-06-06)