Kapsin logo

Kapsi Internet-käyttäjät ry

Git-versionhallinta http:llä

Tässä ohjeessa käsitellään kaksi tapaa, miten voit käyttää git-versionhallintaa http(s)-yhteyden ylitse. Ensimmäinen tapa mahdollistaa vain varastosta (repository) lukemisen ja toinen tapa sekä varastosta lukemisen, että sinne muutoksien tekemisen.

Vain luku -varaston pystyttäminen

Jos sinulla ei ole tarvetta tai et halua, että git-varastoosi voi kirjoittaa, on tämä ohje sinulle sopiva. Tämä soveltuu esimerkiksi projektille, mille haluat git-varaston, josta käyttäjät voivat hakea uusimmat muutokset, mutta et halua, että sitä voi päivittää kukaan muu, kuin sinä. Vain luku -varaston pysyttäminen hyvin yksinkertainen toimenpide. Täytyy vain luoda uusi varasto ~/sites/domain.tld/www kansioon sopivaan paikkaan, luoda post-update tiedosto ja siirtää sinne tiedostot. Toimi seuraavasti.

mkdir ~/sites/domain.tld/www/git/myrepo.git
cd ~/sites/domain.tld/www/git/myrepo.git
git --bare init
cp hooks/post-update.sample hooks/post-update

Seuraavaksi siirrä alla olevan ohjeen mukaisesti tiedostot paikalleen.

Nyt sinulla on vain luku -varasto, joka löytyy osoitteesta http://domain.tld/git/myrepo.git. Voit lähettää omaan kopioon tekemäsi muutokset ssh:n avulla.

cd minunrepo
git remote add origin ssh://käyttäjätunnus@lakka.kapsi.fi/~/sites/domain.tld/www/git/myrepo.git
git push -u origin master
git commit

Lukuoikeuksien rajoittaminen

Jos haluat rajoittaa vain luku -varastosi oikeudet vain tietyille käyttäjille, onnistuu tämä htpasswd:n avulla. .htaccess tiedosto luodaan ~/sites/domain.tld/www/git/myrepo.git kansioon.

Luku- ja kirjotus -varaston asentaminen

Tämä ohje käsittelee git-http-backend:in asentamista kapsin palvelimelle. Git-http-backend mahdollistaa gitin käyttämisen http(s)-yhteyden yli myös palvelimelle päin. Tämän avulla voit myös antaa kaverillesi luku- ja kirjotusoikeudet varastoosi.

Jos tarvitset vain lukukopion git-varastostasi, et tarvitse git-http-backendia. Ohje vain luku -varaston pystyttämiseen löytyy ohjeen lopusta.

Korvaa domain.tld haluamallasi domainilla ja "tunnus" omalla käyttäjätunnuksellasi.

Luodaan uusi varasto

Julkiseen jakoon tarkotettua varastoa varten on varasto luotava --bare option kanssa, jotta se toimisi push:in kanssa. Bare optio poistaa työkopion käytöstä, mitä suositellaan varastoihin johon lähetetään muutoksia push-käskyllä. Jos sinulla oli jo olemassa varasto, myöhemmin tulee kohta, missä siirretään olemassaoleva data nyt luotavaan varastoon.

mkdir ~/sites/domain.tld/code
git --bare init ~/sites/domain.tld/code/myrepo.git

Jatkossa tässä ohjeessa oletetaan, että varastot ovat ~/sites/tunnus.kapsi.fi/code hakemistossa.

Luodaan salasanatiedosto

Tehdään kirjautumista varten salasanatiedosto. Tähän ei tulisi käyttää samaa salasanaa, mikä sinulla on lakalla.

htpasswd -c ~/sites/domain.tld/.gituser.passwd tunnus
> salasana
> salasana uusiksi

Jos tarvitset kirjoitusoikeudet myös kaverillesi ne voi lisätä seuraavasti. (Muistathan laittaa tarpeeksi vahvan salasana, vähintään 10 merkkiä pitkä ja tarpeeksi monimutkainen.)

htpasswd ~/sites/domain.tld/.gituser.passwd kaverisi
> Väh8merkk1äpitkävahva$a1asana
> Väh8merkk1äpitkävahva$a1asana

"Luodaan .htaccess ja cgi-scripti

Tehdään kansio https://domain.tld/git/ ja rajataan sen käyttö aikasemmin määritellylle käyttäjälle. Huomaa muuttaa "tunnus" kohdat omaksi käyttäjänimeksesi.

mkdir ~/sites/domain.tld/www/git

Muokataan seuraavaksi tiedoston ~/sites/domain.tld/www/git/.htaccess sisällöksi.

RewriteEngine On
AcceptPathInfo On

RewriteCond %{REQUEST_URI} ^/(.*/(HEAD|info/refs|objects/(info/[^/]+|[0-9a-f]{2}/[0-9a-f]{38}|pack/pack-[0-9a-f]{40}\.(pack|idx))|git-(upload|receive)-pack))$
RewriteCond %{REQUEST_URI} !git-http-backend
RewriteRule (.*)$ /git/git-http-backend.cgi/$1 [L] 

Options -Indexes
AuthType Basic
AuthName "Private"
Require valid-user
AuthUserFile /var/www/userhome/tunnus/sites/domain.tld/.gituser.passwd

Hox! Vaikka lakalla ei ole /var/www/userhome/tunnus/ hakemistoa, löytyy semmoinen www-palvelimilta.

Koska ScriptAlias ei ole käytettävissä, täytyy git-http-backendiä käyttää cgi-scriptinä. Luodaan seuraavaksi cgi-scripti. Muokataan tiedoston ~/sites/domain.tld/www/git/git-http-backend.cgi sisällöksi seuraavaa. Muuta kohta "tunnus" omaksi tunnukseksesi!

#!/bin/bash
export GIT_PROJECT_ROOT="/var/www/userhome/tunnus/sites/domain.tld/code/"
export GIT_HTTP_EXPORT_ALL=""
/usr/lib/git-core/git-http-backend

Ja annetaan vielä riittävät oikeudet

chmod 500  ~/sites/domain.tld/www/git/git-http-backend.cgi

Git push toimimaan

Git varastolle pitää kertoa, että sitä saa päivittää git push:lla. Tämä onnistuu Lakka-palvelimella seuraavasti.

cd ~/code/myrepo.git
git config http.receivepack true

Datan siirtäminen vanhasta varastosta äskettäin luotuun uuteen varastoon.

Jos sinulla on jo valmiiksi git-varasto, minkä haluat juuri luomaasi http-varastoon, toimi seuraavasti

cd minunrepo
git remote add origin https://tunnus@domain.tld/git/myrepo.git
git push -u origin master

Nyt tiedot ovat uudessa varastossa. Lisäksi jatkossa muutokset menevät automaattisesti uuteen varastoon.

Uuden varaston käyttäminen

Mikäli sinulla ei ole valmiiksi git-varastoa, mutta haluat siirtää olemassaolevia tiedostoja tai luoda uusia, tee omalle koneellesi tai vaikka lakalle kopio tyhjästä varastosta ja siirrä tiedostot sinne.

git clone https://domain.tld/git/myrepo.git
cp olemassaolevatiedosto myrepo/
cd myrepo
git add olemassaolevatiedosto
git commit -m "viesti"
git push

Nyt tiedosto olemassaolevatiedosto on git-varastossa. Voit samalla kertaa lisätä useita tiedostoja ja kansiota. Suorita vain "git add tiedosto" jokaiselle lisättävälle tiedostolle.

Käyttämään!

Jos et vielä kopioinut luomaasi git varastoa on seuraava vaihe kokeilla git-varaston toimintaa.

git clone https://tunnus@domain.tld/git/myrepo.git

Lisää tietoa gitistä on englanniksi gitin kotisivuilta löytyvässä dokumentaatiossa.

Rajoituksia ja muuta huomattavaa

Jos lisäät jollekin käyttäjälle oikeudet htpasswd tiedostoon, tällä käyttällä on luku- ja kirjoitusoikeudet kaikkiin ~/code/ kansion alla oleviin varastoihin. Helpoin ja ainoa tapa rajottaa käyttäjiä on tehdä jaettua varastoa varten tällä ohjeella toinen vastaavanlainen sivu, mutta kuitenkin muuttaen gituser.passwd vaikka gitpubuser.passwd:ksi ja /git kansion joksikin muuksi sekä tekemällä toinen code kansio jaettua varastoa varten.