# 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
- Gitin toiminnallisuus perustuu
.git
-kansion tiedostoihin - Aja
git-harjoitus
-kansiossa komentogit 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.
- 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
- 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
- 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/
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ä).
- Otat lattialta yhden johdon (
git add -N johto
) => johto tulee lastaus alueelle - Otat laatikon ja laitat johdon siihen (
git add johto
) => johto on lastattu eli on valmis vietäväksi koodikantaan - 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ä.