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.