Git
Harjoitus 1: Git-perusteet

Tässä harjoituksessa harjoittelet git commitin, pushin, branchien luontia ja mergeä.

Valmistelut

  1. Luo GitHubiin uusi tyhjä repository nimeltään git-harjoitus (älä lisää README-tiedostoa)
  2. Luo tietokoneellesi uusi kansio nimeltään git-harjoitus
  3. Avaa terminaali ja siirry juuri luotuun kansioon:
    cd polku/kansioon/git-harjoitus
  4. Avaa kansio VS Codessa (File → Open Folder tai kirjoita code . terminaaliin)
  5. Alusta Git-repositorio komennolla:
    git init
  6. Yhdistä paikallinen repo GitHubin repoon (korvaa USERNAME omalla käyttäjänimellä):
    git remote add origin https://github.com/USERNAME/git-harjoitus.git

Osa 1: Ensimmäinen commit ja push

  1. Alusta Node.js projekti:
    npm init -y
  2. Asenna Express:
    npm install express
  3. Luo tiedosto server.js ja kirjoita siihen:
    const express = require('express');
    const app = express();
    const PORT = 3000;
    
    app.get('/', (req, res) => {
        res.json({ message: 'Tervetuloa Git-harjoitukseen!' });
    });
    
    app.listen(PORT, () => {
        console.log(`Serveri käynnissä portissa ${PORT}`);
    });
    
  4. Luo tiedosto .gitignore ja kirjoita siihen:
    node_modules/
    
  5. Tarkista repon tila:
    git status
    Näet, että server.js, package.json ja .gitignore ovat "untracked files"
  6. Lisää tiedostot staging-alueelle:
    git add .
  7. Tee ensimmäinen commit:
    git commit -m "Lisää Express-serveri perustoiminnallisuudella"
  8. Tarkista mikä on nykyisen haaran nimi:
    git branch
    Todennäköisesti se on master
  9. Puskee koodi GitHubiin (master-haaraan):
    git push -u origin master
  10. Tarkista GitHubista, että tiedostot näkyvät siellä (huomaa: node_modules ei näy, koska se on .gitignoressa)
  11. Testaa että serveri toimii:
    node server.js
    Avaa selain ja mene osoitteeseen http://localhost:3000

Osa 2: Uuden branchin luonti ja muutokset

  1. Pysäytä serveri (Ctrl+C)
  2. Luo uusi branch nimeltään feature-users:
    git checkout -b feature-users
  3. Tarkista että olet oikeassa branchissä:
    git branch
    Nykyinen branch näkyy tähdellä merkittynä
  4. Muokkaa server.js -tiedostoa ja lisää uusi endpoint käyttäjille (lisää ennen app.listen-riviä):
    app.get('/', (req, res) => {
        res.json({ message: 'Tervetuloa Git-harjoitukseen!' });
    });
    
    app.get('/users', (req, res) => {
        const users = [
            { id: 1, name: 'Anna' },
            { id: 2, name: 'Mikko' }
        ];
        res.json(users);
    });
    
    app.listen(PORT, () => {
        console.log(`Serveri käynnissä portissa ${PORT}`);
    });
    
  5. Tallenna tiedosto ja tee commit:
    git add server.js
    git commit -m "Lisää /users endpoint"
  6. Puskee branch GitHubiin:
    git push origin feature-users
  7. Tarkista GitHubista, että uusi branch näkyy siellä
  8. Testaa että uusi endpoint toimii:
    node server.js
    Avaa selain ja mene osoitteeseen http://localhost:3000/users

Osa 3: Toisen branchin luonti master-haarasta

  1. Pysäytä serveri (Ctrl+C)
  2. Siirry takaisin master-haaraan:
    git checkout master
  3. Avaa server.js ja huomaa, että äsken lisäämäsi /users endpoint EI näy (koska olet master-haarassa)
  4. Luo uusi branch nimeltään feature-logger:
    git checkout -b feature-logger
  5. Muokkaa server.js ja lisää logger-middleware (lisää heti app-muuttujan jälkeen):
    const express = require('express');
    const app = express();
    const PORT = 3000;
    
    // Logger middleware
    app.use((req, res, next) => {
        console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`);
        next();
    });
    
    app.get('/', (req, res) => {
        res.json({ message: 'Tervetuloa Git-harjoitukseen!' });
    });
    
    app.listen(PORT, () => {
        console.log(`Serveri käynnissä portissa ${PORT}`);
    });
    
  6. Tee commit:
    git add server.js
    git commit -m "Lisää logger-middleware"
  7. Puskee branch GitHubiin:
    git push origin feature-logger
  8. Testaa että logger toimii:
    node server.js
    Avaa selain ja mene osoitteeseen http://localhost:3000
    Terminaalissa pitäisi näkyä lokiviesti: 2024-XX-XX... - GET /

Osa 4: Branchien yhdistäminen (merge)

  1. Pysäytä serveri jos se on käynnissä (Ctrl+C)
  2. Siirry master-haaraan:
    git checkout master
  3. Yhdistä feature-users branch masteriin:
    git merge feature-users
    Näet viestin "Fast-forward" - tämä tarkoittaa että yhdistäminen onnistui ilman konflikteja
  4. Avaa server.js ja tarkista, että /users endpoint nyt näkyy
  5. Yhdistä feature-logger branch masteriin:
    git merge feature-logger
  6. Tarkista että nyt master-haarassa on sekä /users endpoint että logger-middleware
  7. Puskee päivitetty master GitHubiin:
    git push origin master
  8. Tarkista GitHubista, että master-haarassa näkyy nyt molemmat muutokset
  9. Testaa että kaikki toimii yhdessä:
    node server.js
    Avaa selain ja mene osoitteeseen http://localhost:3000/users
    Terminaalissa pitäisi näkyä lokiviesti ja selaimessa käyttäjälista

Osa 5: Ympäristömuuttujat ja .env tiedosto

Nyt lisätään sovellukseen ympäristömuuttujat. Tässä osiossa opit myös, mitä tehdä jos viet vahingossa arkaluontoisia tiedostoja GitHubiin.

  1. Asenna dotenv-paketti:
    npm install dotenv
  2. Luo tiedosto .env ja kirjoita siihen:
    PORT=3000
    SECRET_KEY=minun_salainen_avaimeni_12345
    DATABASE_URL=mongodb://localhost:27017/testdb
    
  3. Muokkaa server.js käyttämään ympäristömuuttujia (korvaa koko tiedoston sisältö):
    require('dotenv').config();
    const express = require('express');
    const app = express();
    const PORT = process.env.PORT || 3000;
    
    // Logger middleware
    app.use((req, res, next) => {
        console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`);
        next();
    });
    
    app.get('/', (req, res) => {
        res.json({
            message: 'Tervetuloa Git-harjoitukseen!',
            port: PORT
        });
    });
    
    app.get('/users', (req, res) => {
        const users = [
            { id: 1, name: 'Anna' },
            { id: 2, name: 'Mikko' }
        ];
        res.json(users);
    });
    
    app.listen(PORT, () => {
        console.log(`Serveri käynnissä portissa ${PORT}`);
        console.log(`SECRET_KEY asetettu: ${process.env.SECRET_KEY ? 'Kyllä' : 'Ei'}`);
    });
    
  4. Testaa että sovellus toimii:
    node server.js
    Terminaalissa pitäisi näkyä: "SECRET_KEY asetettu: Kyllä"
  5. HUOMIO: Nyt teemme TAHALLAAN virheen!
    Commitoi ja pushaa .env tiedosto GitHubiin (ÄLÄ TEE NÄIN OIKEASSA PROJEKTISSA!):
    git add .
    git commit -m "Lisää ympäristömuuttujat"
    git push origin master
  6. Mene GitHubiin ja tarkista - näet että .env tiedosto on näkyvissä! Tämä on turvallisuusongelma, koska salaiset avaimet ovat julkisia.

Tilanteen korjaaminen

Nyt korjataan tilanne:

  1. Muokkaa .gitignore tiedostoa ja lisää siihen .env:
    node_modules/
    .env
    
  2. Poista .env Gitin seurannasta (tämä EI poista tiedostoa koneeltasi):
    git rm --cached .env
  3. Tarkista että .env on nyt "deleted" tilassa:
    git status
  4. Commitoi muutokset:
    git add .gitignore
    git commit -m "Poista .env Gitin seurannasta ja lisää .gitignore"
  5. Pushaa korjaus GitHubiin:
    git push origin master
  6. Tarkista GitHubista että .env ei enää näy uusimmassa versiossa
  7. TÄRKEÄ HUOMIO: Vaikka .env ei enää näy, se on edelleen Git-historiassa! Oikeassa tilanteessa sinun tulisi vaihtaa kaikki salaiset avaimet uusiin. Tämä on hyvä syy olla ALUSTA ASTI huolellinen .gitignore tiedoston kanssa.

Oikea tapa

Opetus: Oikeassa projektissa sinun tulisi:

  1. Lisätä .env heti .gitignore-tiedostoon ENNEN kuin commitoit mitään
  2. Luoda .env.example tiedosto, joka näyttää mitä muuttujia tarvitaan (ilman oikeita arvoja):
    PORT=3000
    SECRET_KEY=vaihda_tämä_omaan_avaimeen
    DATABASE_URL=mongodb://localhost:27017/tietokanta_nimi
    
  3. Commitoida vain .env.example GitHubiin, ei .env tiedostoa

Yhteenveto

Tässä harjoituksessa opit käyttämään Gitin perustoimintoja kuten:

  • ✓ Git commitin tekemistä
  • ✓ Koodin pushaamista GitHubiin
  • ✓ Uusien branchien luontia
  • ✓ Branchien yhdistämistä (merge)
  • ✓ Branchien poistamista
  • ✓ .gitignore-tiedoston käyttöä
  • ✓ .env tiedoston turvallista käsittelyä
  • ✓ Virheen korjaamista (git rm --cached)

Lopputulos: Sinulla on nyt toimiva Express.js backend-sovellus, jossa on:

  • Perus-endpoint (/)
  • Käyttäjälista-endpoint (/users)
  • Logger-middleware joka kirjaa jokaisen pyynnön
  • Ympäristömuuttujat (.env tiedosto)
Voit testata sovellusta avaamalla selaimen ja menemällä osoitteeseen http://localhost:3000/users

Tärkeä opetus: Opit myös miksi .env tiedostoja ei pidä viedä GitHubiin ja miten korjata tilanne jos se vahingossa tapahtuu. Muista aina lisätä arkaluontoiset tiedostot .gitignore-tiedostoon ennen ensimmäistä commitia!



Toggle Menu