Skip to content

Latest commit

 

History

History
179 lines (148 loc) · 6.07 KB

4.LOGIIKKA.md

File metadata and controls

179 lines (148 loc) · 6.07 KB

4. Git logiikka

# Tarkista, että olet työpöydällä
pwd

# Luodaan harjoitusta varten uusi kansio ja mennään kansioon sisään
mkdir git-harjoitus && cd git-harjoitus

Git kansiorakenne

  • Gitin toiminnallisuus perustuu .git-kansion tiedostoihin
  • Aja git-harjoitus -kansiossa komento git init
    • Tämä luo .git-kansion

.git-kansion sisältö:

├── HEAD
├── branches
├── config
├── description
├── logs
│ ├── HEAD
│ └── refs
│   └── ...
├── hooks
│ ├── pre-commit.sample
│ ├── pre-push.sample
│ └── ...
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs
 ├── heads
 └── tags

Ei mennä tarkemmin siihen mitä nämä kaikki tiedostot ja kansiot pitää sisällään ja mikä merkitys niillä on. Jotain voi lukea https://medium.freecodecamp.org/understanding-git-for-real-by-exploring-the-git-directory-1e079c15b807

Tässä vaiheessa oleellisinta on tajuta tämä:

gitin käyttö ei ole mitään magiikkaa vaan git on ohjelma, joka seuraa tiedostojen versioita käyttäen hyödyksi .git -kansion sisältöä.

  • Jos haluat poistaa gitin ja aloittaa täysin puhtaalta pöydältä, .git-kansion poisto riittää siihen.
  • Riippumatta siitä käytetäänkö gittiä komentoriviltä tai jonkun GUI-ohjelman kautta, molemmat lopulta muokkaavat .git-kansiota.

.gitignore

  • Yleensä projekteissa on tiedostoja, joita ei haluta mukaan versionhallintaan, mutta ovat kuitenkin osa projektia
    • Esim. WordPressissä tällaisia tiedostoja on monesti WordPressin Coren tiedostot
  • Tällaiset tiedostot voidaan määrittää .gitignore tiedostossa
    • Kerrotaan gitille, että älä seuraa näitä tiedostoja äläkä sisällytä niitä pakettiin
# Luodaan kaksi tiedostoa, joista toinen halutaan versionhallintaan ja toinen ei
touch tama-gittiin-mukaan.txt
touch tama-ei-gittiin-mukaan.txt

# Luodaan .gitignore
touch .gitignore

# Tarkistetaan gitin tilanne
# Molemmat tiedostot pitäisi näkyä kohdassa "Untracked files:"
git status

# Lisätään tama-ei-gittiin-mukaan.txt .gitignoreen
nano .gitignore
# Avautuu GNU Nano -editori, joka on yksinkertainen tekstieditori
# Lisää tama-ei-gittiin-mukaan.txt omalle rivilleen
# Paina ctrl+O ja Enter (tallentaa) ja ctrl+X (sulkee editorin)

# Tarkistetaan gitin status uudestaan
# tama-ei-gittiin-mukaan.txt -tiedostoa ei pitäisi enää näkyä
git status

.gitkeep

  • Toisinaan törmää myös tämän nimiseen tiedostoon, joka on vain placeholder
  • git ei seuraa täysin tyhjiä kansioita
    • Vasta kun kansiossa on sisältöä, se on gitin mielestä olemassa
  • Toisinaan kuitenkin halutaan gittiin mukaan myös tyhjiä kansiota (esim. valmista kansiorakennetta varten)
  • Tällöin kansion sisälle luodaan .gitkeep
  • Tiedoston nimi voisi olla käytännössä mikä vain, mutta .gitkeep on saavuttanut jonkinlaisen standardin aseman
# Luo tyhjä kansio
mkdir tyhja-kansio

# Tarkista gitin status
# tyhja-kansiota ei näy missään
git status

# Luodaan .gitkeep -tiedosto tyhja-kansioon
touch tyhja-kansio/.gitkeep

# Tarkista gitin status
# tyhja-kansio ilmestyi!
git status

# Sama saavutetaan myös jollain toisen nimisellä tiedostolla
# Mutta käytä silti .gitkeepiä
mkdir uusi-tyhja
git status
touch uusi-tyhja/.sailyta
git status

Gitin logiikka ja sanastoa

  • repository, repo = git-projektin kansio
  • untracked files = git ei seuraa tiedostoja, mutta on kuitenkin tietoinen tiedostoista
  • unstaged files = git seuraa tiedostoa ja on huomannut, että tiedostoissa on muutoksia
  • staged files = git on tallentanut muutokset ja muutokset ovat valmiita vietäväksi koodikantaan
  • commit = yksittäinen muutos koodikantaan
  • local, lokaali = omalla tietokoneella oleva repo
  • remote = jossain muualla sijaitseva kopio reposta
# Kerrotaan gitille, että seuraa tama-gittiin-mukaan.txt ja lisää se staged tiedostoihin
git add tama-gittiin-mukaan.txt

# Kerrotaan gitille, että seuraa .gitignorea, mutta älä lisää sitä staged tiedostoihin
git add -N .gitignore

git status pitäisi tämän jälkeen olla seuraavanlainen:

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   tama-gittiin-mukaan.txt

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)

	new file:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	tyhja/
	uusi/

Käytännön esimerkki

Työpöydällä on laatikkokasa ja lattialla sekalainen joukko erinäköisiä johtoja. Laatikkokasa on ikäänkuin sun lokaali repo ja johdot ovat "untracked files" eli tavaraa, joka ei vielä ole repossa(=laatikoissa) tai edes vielä matkalla repoon eli stating alueella(=työpöydällä).

  1. Otat lattialta yhden johdon (git add -N johto) => johto tulee lastaus alueelle
  2. Otat laatikon ja laitat johdon siihen (git add johto) => johto on lastattu eli on valmis vietäväksi koodikantaan
  3. Laitat laatikon kiinni ja kirjoitat kylkeen "Lisää johto" ja laitat laatikon kasan päällimmäiseksi (git commit -m "Lisää johto") => johto on viety koodikantaan ja on nyt osa sitä

Lopputulema on kasa laatikoita:

+-------------+
| Lisää mukit |
+-------------+
+-------------+
| Lisää sukat |
+-------------+
+-------------+
| Lisää akku  |
+-------------+
+-------------+
| Lisää johto |
+-------------+

Tässä esimerkissä kukin laatikko on yksi commit. Git niin ikään säilöö commitit stackkina eli pinona.

# Lisätään lastausalueella olevat ja valmiit muutokset repoon
git commit -m "Add text file"

# Lisätään lastausalueella oleva .gitignore repoon
git add .gitignore
git commit -m "Add .gitignore"

# Lisätään vielä untracked tiedostot repoon
git add .
git commit -m "Add rest of the stuff"

Komennolla git log näet commit stackin sekä tarkempia tietoja kustakin commitista. Uusin commit on aina päällimmäisenä.