GIT HÖGUN

Dæmi um verkefnavinnu þar sem Git vaktar vinnusvæði þitt í staðbundinni geymslu (local repository). Flæðið er í stuttu máli eftirfarandi:

  1. Working Directory (Untracked)
  2. Staging Area (Index)
  3. Local Repository
  4. Remote Repository (origin)

Git diagram

  1. Þú byrjar að skrifa kóða á fullu sem þú ýmist vistar eða hendir.
    • Vinnuskrá - Working Directory (Untracked)
  2. Þú tekur saman það sem þú ert að gera reglulega (lágmark á klukkutíma fresti).
    • git addSviðsetning - Staging Area (Index) - og skráir atriðin í vinnuskrána (Working Directory).
    • git commit -m 'skýring'
    • athugið að með hverri skráningu verður að fylgja skýring -m ‘atriði skráð hér’
  3. Þegar vinnutíma er lokið sendir þú verkefnið yfir á Github.
    • git pushFjartengd geymsla - Remote Repository
  4. Þegar þú byrjar aftur á verkefninu, athugar þú hvort þú sért með nýjustu útgáfu af því.
    • git status – Athugar stöðu staðbundinnar geymslu gegn fjartengdri geymslu – Local vs Remote
    • Ef nýrri útgáfa er til á fjartengdu geymslunni (Remote Repository)
      • git pull – Sækir breytingar og sameinar (merge) eldri útgáfu.
      • git fetch – Sækir breytingar frá fjartengdu geymslunni en sameinar þær ekki.

Skráning – Commit

Hver skráning (commit) í Git, skráir upplýsingar um stöðu verkefnins í vinnuskrána (Working Directory) á þeim tíma. Í hverri skráningu eru upplýsingar um höfund þess og dagsetningu. Hver skráning fær einkvæmt SHA1 hash gildi, einskonar kennimerki (e. identifier) í vinnuskránni.

Hver skráning í Git eru með tilvísun (pointer) á skráninguna þar á undan (parent commit). Þannig er sagan uppbyggð í Git. Eins og sjá má á neðangreindri mynd.

git commit

Í Git er bendir (pointer) sem ber heitið HEAD. Þessi bendir færist í hvert skipti sem þú ferð á nýjan stað í vinnuskránni með git checkout skipuninni.

Git $kipanir.

$ git init

  • Býr til nýja geymslu (repository) og setur inn umsjónarkerfið
  • Umsjónarkerfið er í falinni möppu .git (Ekki að gera neitt með skjölin í þessari möppu nema að þú hafir fullan skilning á Git)

$ git status

Sýnir stöðu HEAD, td. hvaða skrár eru óskráðar (untracked), hvaða skrám hefur verið breytt eða eytt. Eftir að hafa sviðsett (add to stage) skrárnar þarf að skrá þær (commit) í vinnuskrána (Working Directory).

git status

Á myndinni hér fyrir ofan er:

  • baz.txt hefur verið breytt og sú breyting sviðsett (staged). Hún er tilbúin fyrir skráningu (commit).
  • bar.txt hefur verið eytt en sú breyting hefur ekki verið sviðsett.
  • foo.txt skrá breytt en sú breyting hefur ekki verið sviðsett.
  • smuu.txt ný skrá sem Git er ekki að fylgjast með (untracked).

$ git add

  • Sviðsetning skráar/möppu í Staging Area (Index). Vinnuferlið er tilbúið fyrir skráningu (_commit) í vinnuskána. Eins og sjá má á myndinni hér fyrir ofan er baz.txt sviðsett

$ git add <file>

  • Ein tiltekin skrá sviðsett

$ git add .

  • Allar skrár og breytingar sviðsettar í einu lagi

$ git commit

  • Vinnuferlið er skráð í vinnuskrána (Working Directory).

$ git commit -m "Commit Message"

  • Öllum skráningum verður að fylgja skýring á atriði

$ git push

  • Uppfærir gögn í fjartengdu geymslunni til samræmis við staðbundna geymslu

$ git pull

  • Sækir ný eða breytt gögn af fjartengdri geymslu

Grein (Branch)

Greinar (branches) í Git eru tilvísanir (pointers) á tilteknar skráningar (commits). Git er allt byggt á tilvísunum (pointers).

Pointers

Á myndinni hér fyrir ofan má sjá eftirfarandi:

  • HEAD tilvísun bendir á master
  • master tilvísun bendir svo á C2 skráninguna
  • test tilvísun bendir á T1 skráninguna
  • C1 er fyrsta skráningin
  • T1 skráningin var búin til út frá C2
  • C2 skráningin var búin til út frá C1
  • Þegar þú skráir checkout master ertu á C2 skráninguni
  • Þegar þú skráir checkout test ertu á T1 skráninguni

$ git push origin <branch>

  • Staðbundin grein yfirfærð á fjartengda geymslu, þar sem greinin er ekki til

$ git push origin :<branch>

  • Eyðir grein á fjartengdri geymslu. Taktu eftir tvípunktinum á undan greininni

$ git pull origin <branch>

  • Sækir grein origin sem ekki er til í staðtengdri geymslu

$ git checkout

  • Þegar farið er á milli greina (branches) notum við skipunina checkout. HEAD fylgist með stöðunni og skráir í vinnuskrána.

$ git checkout <branch>

  • Vísar þér yfir á grein og færir um leið HEAD bendirinn

$ git checkout -b <branch>

  • Býr til nýja grein og færir þig yfir á hana

$ git branch

  • Sýnir lista yfir allar staðtengdar (local) greinar

$ git branch --remote

  • Sýnir lista yfir allar fjartengdar (remote) greinar

$ git branch --all

  • Sýnir lista yfir allar staðtengdar og fjartengdar greinar (local & remote)

$ git branch <branch>

  • Býr til nýja (local) grein

$ git branch -d <branch>

  • Eyðir (local) grein sem hefur verið sameinuð (merge) inn í master

$ git branch -D <branch>

  • Eyðir (local) grein sem hefur EKKI verið sameinuð (merge) inn í master

$ git log

  • Sýnir lista yfir allar skráningar (commit) sem gerðar hafa verið í greininni sem HEAD bendir á

$ git log <branch>

  • Sýnir lista yfir allar skráningar (commit) í tiltekinni grein

$ git log <grein1>..<grein2>

  • Sýnir lista yfir allar skráningar sem eru í grein2 en ekki í grein1

$ git log <grein1>...<grein2>

  • Sýnir lista yfir skráningar sem eru annað hvort í grein1 eða grein2

Hér fyrir neðan má sjá mynd sem útskýrir þetta betur:

git log

$ git diff

  • Sýnir breytingar sem þú ert að vinna í frá síðustu skráningu (commit).

$ git diff ...<branch>

  • Sýnir mun (diff) á skráningu í grein, sem er ekki í greininni sem þú ert á núna (HEAD).

$ git diff <grein1>...<grein2>

  • Sýnir mun (diff) á skráningu tveggja greina og sýnir breytingar sem eru í grein2 en ekki grein1.

Hér fyrir neðan má sjá mynd sem útskýrir þetta betur:

git diff

$ git diff --staged

  • Sýnir allar breytingar sem eru sviðsettar (Staging Area)

$ git rm <file>

  • Eyðir skrá úr Git og sviðsetur (stage) breytinguna. Þú þarft svo að skrá (commit) breytinguna

$ git rm --cached <file>

  • Eyðir skrá úr Git. Sviðsetur (stage) breytinguna en eyðir ekki skránni úr vinnuskránni (Working Directory)

$ git clean -f -d

  • Eyðir óskráðum (untracked) skrám úr vinnuskránni (Working Directory)
  • -f = Force -d = Directories

$ git merge <branch>

  • Sameinar (merge) grein inn í greinina (current branch) sem þú ert á.
  • Til að sjá hvaða grein þú ert á skaltu nota git branch skipunina.

$ git prune origin --dry-run

  • Sýnir allar staðtengdar (local) greinar sem samræmast ekki fjartengdum (remote) greinum
  • --dry-run = Bara sýna, ekki breyta neinu

$ git clone <repository>

  • Klónar Git geymslu á nýtt vinnusvæði, allar skráningar fylgja með.
  • Dæmi: þú stofnar geymslu á GitHub (*New Repository*) og klónar hana síðan yfir á staðtengt (local) vinnusvæði, Git hefur þá allar upplýsingar um miðlarann og þú getur byrjað strax að vinna

$ git remote

  • Remote’ er vísun í uppstreymi veitu, til dæmis GitHub. Það er alveg eins hægt að vísa í aðra klónaða geymslu á tölvunni þinni. Git er alveg sama, svo framarlega sem það er klónuð Git geymsla

$ git remote add origin git@github.com:username/repo.git

  • Bætir við nýrri origin geymslu á GitHub reikningi sem ber heitið repo.
  • origin stendur fyrir uppruna geymslunnar.

$ git remote -v

  • Sýnir allar tengingar í núverandi geymslu.

SSH

Þegar átt eru samskipti við server (remote) er oft notað SSH. SSH samskipti eru dulkóðuð og mjög örugg. Til þess að geta átt örugg samskipti við servera eins og t.d. GitHub þarf maður að auðkenna sig gagnvart honum. Gengið er í gegnum ferlið einu sinni (fyrir hverja tölvu) og er það eftirfarandi:

Heimildir