[[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)