Git-ohjeet

Sisällysluettelo

Mikä on Git?

Git on hajautettu versionhallintaohjelmisto, jota käytetään laajasti ohjelmistokehityksessä. Sen avulla on helppo noutaa, muokata ja yhdistää tiedostoja ja tiedostoihin tehtyjä muutoksia eri lähteiden välillä. Tämän ohella Git toimii varmuuskopiointina, undo-historiana ja yhteistyöalustana. Sen avulla tiedostojen eri versioita, työvaiheita tai erilaisia ratkaisuvaihtoehtoja on helppo ja tehokas vertailla ja yhdistellä sekä tarvittaessa palauttaa.

Git soveltuu erinomaisesti asiakirjaluonnosteluun. Siinä Git on niin tehokas työkalu, että sen vähäinen suosio asianajo- ja lakiasiaintoimistojen keskuudessa on melko yllättävää.

Takaisin sisällysluetteloon

Toimistomme Git-palvelin

Toimistomme on ylläpitänyt omaa Git-palvelinta keväästä 2016. Git-palvelin on korotetun tietoturvatason palveluitamme, ja siksi emme käytä siihen pilvipalveluita tai edes konesalipalveluita, vaan palvelinkone on omissa tiloissamme lukitussa ja jatkuvasti valvotussa ympäristössä.

Palvelinohjelmistona käytämme Gitoliteä, joka mahdollistaa luontevan ja turvallisen repositorioiden hallinnan1.

Git-palvelin on ollut pääasiallisesti teknisesti edistyneimpien asiakkaittemme ja yhteistyökumppaniemme käytössä. Gitolite ei sellaisenaan sisällä graafista käyttöliittymää (esim. WWW-rajapintaa) vaan toimii ssh-palvelimen kautta. Sitä on kuitenkin mahdollista käyttää graafisen asiakasohjelman (Git GUI client) kautta.

Takaisin sisällysluetteloon

Git-ohjelmiston asentaminen

Ottaaksesi Git-palvelumme käyttöösi tarvitset Git- ja OpenSSH-ohjelmistot (sekä luonnollisesti ne ohjelmistot, joista nämä ovat riippuvaisia, kuten OpenSSL-kirjaston).

Git-ohjelmiston asentaminen Linux-ympäristössä

Linux-ympäristössä saat tarvittavat ohjelmat kätevimmin asennettua Linux-jakelusi omalla paketinhallintajärjestelmällä, kuten apt (Debian) tai dnf (Fedora).

Esimerkiksi Debian-Linuxissa tämä tapahtuu seuraavalla komennolla:

sudo apt install git openssh-client

Paketinhallintajärjestelmä pitää huolen siitä, että riippuvuudet tulee täytettyä eli että myös tarvittavat muut ohjelmistot (kuten OpenSSL) asennetaan.

Seuraavalla komennolla voit tarkistaa, että ko. ohjelmat ovat käyttämässäsi järjestelmässä asennettuina2:

which git ssh ssh-keygen

Takaisin sisällysluetteloon

Git-ohjelmiston asentaminen Windows-ympäristössä

Lataa Git-ohjelmisto sivulta https://git-scm.com/download/win.

Git-ohjelmiston lataaminen ja asentaminen.

  • Valitse heti latauksen jälkeen ”Run”.
  • Vastaa kysymykseen ”Do you want to run this software” myöntävästi.
  • Hyväksy GNU:n lisenssi.
  • Valitse asennushakemisto ja Start menu -hakemisto (jätä oletukset).
  • Valitse seuraavat asennusoptiot3:
    • Use Git from Windows Command Prompt
    • Use the OpenSSL library
    • Checkout Windows-style, commit Unix-style line endings
    • Use Windows’ default console window
    • Enable file system caching
  • Ja paina lopuksi”Install”.

Näiden vaiheiden jälkeen asennusohjelman pitäisi ilmoittaa, että Git-ohjelmisto on onnistuneesti asennettu.

Takaisin sisällysluetteloon

Toimistomme Git-palvelun käyttöönotto

Git-palvelimemme tunnistaa käyttäjät SSH-avainparien perusteella. Sinun on luotava oma avainparisi itse4. Avainparin yksityinen avain (ei .pub-tiedostopäätettä) jää sinulle, ja se kannattaa tallentaa turvallisesti5. Toimita julkinen avain (.pub-tiedostopääte) toimistollemme turvalliseksi katsomallasi tavalla (esim. PGP-salatulla sähköpostilla, muistitikulla tai asiointisivumme kautta).

Vastaanotettuamme julkisen avaimesi lisäämme sen identifioiman käyttäjän Git-palvelimelle ja toimitamme sinulle SSH-konfiguraation sisältävän asetustiedoston eli tiedot, joilla saat palvelun käyttöösi.

Git-palvelun käyttöönotto Linux-ympäristössä

Generoi SSH-avainpari seuraavilla komennoilla:

test -d ~/.ssh||mkdir ~/.ssh
ssh-keygen -t rsa -b 2048 -f ~/.ssh/USER

siten, että merkkijonon USER tilalla on toivomasi käyttäjätunnus. Halutessasi voit antaa avaimelle salasanan, mutta se ei ole välttämätöntä6.

Toimita julkinen avain (USER.pub) toimistollemme.

Lisättyämme käyttäjän palvelimelle lähetämme sinulle seuraavansisältöisen SSH:n config-tiedoston:

Host ohgit
HostName DOMAIN
ForwardX11 no
PasswordAuthentication no
IdentityFile ~/.ssh/USER
Port 22
User git

Olettaen, että toimistollemme lähettämääsi julkista avainta vastaava yksityinen avain on tallennettu tiedostoon ~/.ssh/USER, saat pääsyn palvelimelle yksinkertaisesti lisäämällä yllä lainatut rivit tiedostoon ~/.ssh/config (luonnollisesti merkkijonolla USER tarkoitetaan tässäkin valitsemaasi käyttäjätunnusta; merkkijonolla DOMAIN tarkoitetaan Git-palvelimemme domain-nimeä, jota emme tietoturvasyistä julkaise tässä; User-rivillä määritelty käyttäjä git ei ole virhe: Gitolite-palvelimella kaikki toimii ”pääkäyttäjän” git kautta ja sinut identifioidaan vain SSH-avaimen perusteella).

Saat listauksen repositorioista, joihin sinulla on pääsy, komennolla

ssh ohgit

ja pääset kloonaamaan repositorion komennolla

git clone ohgit:REPOSITORY

(tässä merkkijonolla REPOSITORY tarkoitetaan kloonattavaa repositorioita).

Repositorio ”testing” on varattu Git-palvelimen testaukseen. Siihen kaikilla järjestelmän käyttäjillä on sekä luku- että kirjoitusoikeus. Voit kloonata sen omalle koneellesi komennolla

git clone ohgit:testing

HUOM: testing-repositorio näkyy kaikille muillekin Git-palvelumme käyttäjille, joten älä kirjoita sinne mitään arkaluontoista!

Lopuksi on hyvä vielä kertoa Gitille, millä nimellä teet muutoksia ja mikä on sähköpostiosoitteesi:

git config --global user.name "Oma Nimesi"
git config --global user.email sähköposti@osoitteesi

Takaisin sisällysluetteloon

Git-palvelun käyttöönotto Windows-ympäristössä

Graafinen ohjelma Git GUI ei anna riittävän laajoja vaihtoehtoja, joten SSH-avainpari täytyy generoida komentoriviltä.

Käynnistä siis Start-valikon kautta Git Bash:

Git Bashin käynnistäminen Start-valikon kautta.

Generoi SSH-avainpari antamalla Git Bashissa seuraavat komennot:

test -d ~/.ssh||mkdir ~/.ssh
ssh-keygen.exe -t rsa -b 2048 -f ~/.ssh/USER

siten, että merkkijonon USER tilalla on toivomasi käyttäjätunnus. Jos haluat suojata avaimen salasanalla, voit tehdä niin, mutta sillä ei ole palvelumme toimivuuden kannalta mitään merkitystä.

Avainparin generoimisen pitäisi näyttää sunnilleen tältä:

SSH-avainparin generoiminen.

Toimita julkinen avain (USER.pub) toimistollemme.

Lisättyämme käyttäjän palvelimelle lähetämme sinulle seuraavansisältöisen SSH:n config-tiedoston:

Host ohgit
HostName DOMAIN
ForwardX11 no
PasswordAuthentication no
IdentityFile ~/.ssh/USER
Port 22
User git

Olettaen, että toimistollemme lähettämääsi julkista avainta vastaava yksityinen avain on tallennettu tiedostoon ~/.ssh/USER, saat pääsyn palvelimelle yksinkertaisesti lisäämällä yllä lainatut rivit tiedostoon ~/.ssh/config (luonnollisesti merkkijonolla USER tarkoitetaan tässäkin valitsemaasi käyttäjätunnusta; merkkijonolla DOMAIN tarkoitetaan Git-palvelimemme domain-nimeä, jota emme tietoturvasyistä julkaise tässä; User-rivillä määritelty käyttäjä git ei ole virhe: Gitolite-palvelimella kaikki toimii ”pääkäyttäjän” git kautta ja sinut identifioidaan vain SSH-avaimen perusteella).

Listauksen repositorioista, joihin sinulla on pääsy, saat Git Bashissa komennolla

ssh ohgit

ja pääset kloonaamaan repositorion komennolla

git clone ohgit:REPOSITORY

(tässä merkkijonolla REPOSITORY tarkoitetaan kloonattavaa repositorioita).

Repositorio ”testing” on varattu Git-palvelimen testaukseen. Siihen kaikilla järjestelmän käyttäjillä on sekä luku- että kirjoitusoikeus. Voit kloonata sen omalle koneellesi komennolla

git clone ohgit:testing

HUOM: testing-repositorio näkyy kaikille muillekin Git-palvelumme käyttäjille, joten älä kirjoita sinne mitään arkaluontoista!

Tässä esimerkki yllä mainittujen komentojen käytöstä:

Git-repositorioiden listaus ja kloonaus.

Kuvan esimerkissä on kloonauksen jälkeen siirrytty kloonattuun hakemistoon komennolla ”cd” ja sen jälkeen listattu hakemiston sisältö komennolla ”ls”. Kloonattu hakemisto sisältää tiedoston ”test.txt”.

Lopuksi on hyvä vielä kertoa Gitille, millä nimellä teet muutoksia ja mikä on sähköpostiosoitteesi. Tämä tapahtuu antamalla Git Bashissa seuraavat komennot:

git config --global user.name "Oma Nimesi"
git config --global user.email sähköposti@osoitteesi

Esimerkki Gitin asetusten määrittelystä.

Takaisin sisällysluetteloon

Git-palvelun peruskäyttö

Tyypillinen kaava Gitin käytössä on ensin kloonata repositorio omalle koneelle paikalliseksi kopioksi ja sen jälkeen työstää repositorion sisältöä seuraavaa kaavaa toistaen:

  1. muiden tekemien muokkausten lataaminen palvelimelta (pull)
  2. muokkausten tekeminen repositorioon
  3. muokkausten tilannekuvan lisääminen valmistelualueelle (staging eli add)
  4. pysyvän muutoksen tekeminen (commit)
  5. omien pysyvien muutosten tallentaminen palvelimelle (push)

Git on todella monipuolinen ohjelmisto, ja näissä ohjeissa on tarkoituksenmukaista käydä läpi vain sen kaikkein perustavimmat toiminnot sekä toimistomme Git-palvelimen käyttöönotto. Hyvät ja kattavat (osittain suomennetut) ohjeet Gitin käyttöön yleisesti löydät osoitteesta https://git-scm.com/book/fi/v1/Gitin-perusteet.

Alla vielä esimerkit Gitin tyypillisestä käytöstä Linux- ja Windows-ympäristöissä.

Esimerkki Git-palvelun käytöstä Linux-ympäristössä

Oletetaan, että käyttäjä on jo aiemmin kloonannut repositorion ja haluaa nyt tarkistaa toimistomme siihen tekemät muutokset sekä ehdottaa itse muutoksia. Tämä tapahtuu seuraavilla komennoilla (esimerkkinä on käytetty testing-repositoriota):

user@work:/tmp/testing$ git pull
Already up-to-date.
user@work:/tmp/testing$ vim test.txt 
user@work:/tmp/testing$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   test.txt

no changes added to     commit (use "git add" and/or "git commit -a")
user@work:/tmp/testing$ git diff
diff --git a/test.txt b/test.txt
index 5c90252..4430f65 100644
--- a/test.txt
+++ b/test.txt
@@ -2,3 +2,5 @@ Tämä on testi.
 
 Rerum ipsum veniam laborum iusto rerum. In magni in quod qui voluptatem sequi
 voluptatem. Ut itaque laboriosam mollitia animi officiis qui quam.
+
+Yksi rivi lisää.
user@work:/tmp/testing$ git add test.txt 
user@work:/tmp/testing$ git commit
[master 61f4aa1] esimerkki gitin käytöstä
 1 file changed, 2 insertions(+)
user@work:/tmp/testing$ git push
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 310 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git:testing
   0b13ed0..61f4aa1  master -> master
user@work:/tmp/testing$ 

Esimerkissä käyttäjä lataa repositorioon tehdyt muokkaukset palvelimelta komennolla ”git pull” (mitään muutoksia ei tosin palvelimella olevalle datalle tehty) ja muokkaa tiedostoa test.txt vim-editorilla. Tämän jälkeen hän tarkastaa Gitin tilan komennolla ”git status”, joka kertoo, että tiedostoa test.txt on muokattu, ja listaa tehdyt muutokset komennolla ”git diff”, joka kertoo, että tiedostoon on lisätty yksi tyhjä rivi ja yksi rivi tekstiä. Edelleen käyttäjä lisää muutokset ”valmistelualueelle” (staging) komennolla ”git add” ja tekee muutoksista pysyviä komennolla ”git commit”. Lopuksi käyttäjä tallentaa tekemänsä muutokset palvelimelle komennolla ”git push”.

Takaisin sisällysluetteloon

Esimerkki Git-palvelun käytöstä Windows-ympäristössä

Oletetaan, että käyttäjä on jo aiemmin kloonannut repositorion ja haluaa nyt tarkistaa toimistomme siihen tekemät muutokset sekä ehdottaa itse muutoksia. Tämä tapahtuu seuraavilla komennoilla (esimerkkinä on käytetty testing-repositoriota):

Esimerkki Gitin käytöstä Windowsissa.

Esimerkissä käyttäjä siirtyy hakemistoon ~/testing, lataa repositorioon tehdyt muokkaukset palvelimelta komennolla ”git pull” (toisin kuin Linux-esimerkissä nyt muutoksia on tehty) ja muokkaa tiedostoa test.txt vim-editorilla. Tämän jälkeen hän tarkastaa Gitin tilan komennolla ”git status”, joka kertoo, että tiedostoa test.txt on muokattu, ja listaa tehdyt muutokset komennolla ”git diff”, joka kertoo, että tiedostoon on lisätty yksi rivi tekstiä. Edelleen käyttäjä lisää muutokset ”valmistelualueelle” (staging) komennolla ”git add” ja tekee muutoksista pysyviä komennolla ”git commit”. Lopuksi käyttäjä tallentaa tekemänsä muutokset palvelimelle komennolla ”git push”.

Git Bashille on olemassa myös useita graafisia vaihtoehtoja, joista yksi, Git GUI, asentuu osana Gitin Windows-pakettia. Alla näkymä työskentelytilanteesta, jossa testing-repositorio on auki sekä Git GUI:ssa että Windows Explorerissa ja test.txt-tiedostoa muokataan Notepadissä.

Git GUI, Windows Explorer ja Notepad

Git ei aseta mitään rajoitteita sille, millä ohjelmilla repositorion sisältöä voi muokata, vaan kukin voi käyttää siihen mitä tahansa mieleistään ohjelmaa, kunhan aina muokkausten jälkeen suoritetaan ”git add”, ”git commit” ja ”git push”.

Git GUI:n kautta on myös helpoin ja luontevin tarkistaa repositorioon tehdyt muutokset:

Git GUI -visualisoinnin käynnistäminen

Git GUI -visualisointinäkymä.

Muista graafisista Git-ohjelmistoista ks. https://git-scm.com/download/gui/windows.

Takaisin sisällysluetteloon


  1. Gitolite on käytössä myös Linux-kernelin kehitysyhteistyössä, ks. https://www.kernel.org/faq.html.

  2. which-komento etsii parametrina saamiensa komentojen tiedostopolut ja tulostaa ne. Ellei järjestelmässä ole sen parametrina saamaa komentoa, se ei tulosta ko. komennon osalta mitään vaan asettaa paluuarvoksi ”1”.

  3. Git on toki mahdollista saada toimimaan muillakin konfiguraatioilla, mutta nämä ovat Windows-testiasennuksemme käyttämämme optiot, joilla Gitin ainakin pitäisi toimia.

  4. Lähtökohtaisesti on turvallisempaa, että käyttäjä itse luo avainparin, jolloin vain julkinen avain siirretään verkon yli. Jos käytössäsi on PGP tms. turvallinen viestintämenetelmä, myös toimistomme voi luoda avaimen ja lähettää yksityisen avaimen sinulle.

  5. Sinä itse määrität, miten turvallisesti haluat tallentaa avaimesi. Tyypillisesti SSH-avain tallennetaan käyttäjän kotihakemiston .ssh-alahakemistoon. Tätä vaihtoehtoa tietoturvallisempi ratkaisu on esim. tallentaa avaimet salatulle muistitikulle, joka mountataan tarvittaessa, ks. esim. https://help.ubuntu.com/community/EncryptedFilesystemsOnRemovableStorage.

  6. Yksityisten avainten salasanojen tarpeellisuudesta ks. esim. https://www.qubes-os.org/doc/split-gpg/ ”the so-often-used passphrases on private keys are pretty meaningless because the attacker can easily set up a simple backdoor which would wait until the user enters the passphrase and steal the key then”.

Kommentoi





Kommenteissa sallitut HTML-tagit: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <em> <i> <strike> <strong>