[[oktatas:linux|< Linux]]
====== Git szerver ======
* **Szerző:** Sallai András
* Copyright (c) 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/2010/03/01/a-simple-way-to-create-git-repository-on-a-server-machine-connecting-via-ssh/|https://rwehner.wordpress.com/]] (2015-06-06)
* https://www.linux.com/learn/tutorials/824358-how-to-run-your-own-git-server (2015-06-06)