Mõisted

Remote Repository

Remote repositoorium on Sinu projekti versioon, mida hoitakse internetis. See võimaldab mitmel inimesel erinevatest kohtadest sama projekti kallal koostööd teha. Remote repositooriume hoitakse tavaliselt platvormidel nagu GitLab, GitHub või Bitbucket.

Koostööl põhineva projekti korral peab arendaja saama iseseisvalt panustada, mõjutamata teisi kasutajaid või sõltumata neist.

Algse repo koopia tegemiseks kasutaja kontole pakub git võimalust nimega forking. Pärast fork -imist viidatakse algsele repole kui upstream ja hargnenud repole kui origin.

On olemas ka Git clone, mis on on põhimõtteliselt repo allalaadimine Sinu arvutisse. Peamine erinevus seisneb selles, et Fork teeb Sinu kontole projektist täiesti Sinu enda koopia, aga Clone laeb olemasoleva repo Sinu masinasse. Origin Origin on nimi, mis antakse vaikimisi Sinu masinasse kloonitud remote repodele. See toimib justkui viitena algse repo URL-ile.

Kasutus:

Muudatuste push-imine: kui teed oma projektis muudatusi ja soovid need saata remote reposse, et seal oma muudatusi turvaliselt hoida, siis saad push-imise abil seda teha.

Muudatuste fetch-imine: remote repost teiste arendajate muudatuste (mis on push-itud) hankimiseks.

Praktiline ülesanne: remote repository

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

1. Remote'i vaatamine ja haldamine PyCharmis:

  • Avage PyCharmis oma projekt.

  • Ülemisest menüüst valige Git > Manage Remotes....

  • Avaneb aken, kus näete kõiki teie projekti jaoks seadistatud kaugservereid (remotes). Tavaliselt on kaugserveri nimi origin.

  • Siin saate lisada uusi kaugservereid, muuta olemasolevate URL-e või kustutada neid.

2. Remote'i vaatamine ja haldamine terminalis:

  • Vaata olemasolevaid remotes:

git remote -v
  • Lisa uus remote:

git remote add [nimi] [URL]

Näiteks:

git remote add upstream https://gitlab.com/algne/repo.git

Upstream

Upstream on samuti viide remote repole, tavaliselt originaalsele repole, millest oma koopia eraldasid. See aitab hoida kloonitud projekti algse projektiga sünkroonituna.

Kasutus:

Algse projektiga sünkroonimine: kui kloonisid projekti ja soovid hankida algse projekti repost uusimad muudatused, hangid muudatused upstream-ist.

Muudatuste ühendamine main haruga: pärast täiustuste või paranduste tegemist oma harus loo merge request, et lisada muudatused upstream repositooriumisse.

Praktiline ülesanne: upstream

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

1. Upstream'i seadistamine PyCharmis:

  • Kui olete forkinud repositooriumi ja soovite seadistada upstream kaugserveri, et hoida oma fork ajakohasena:
    • Avage Git > Manage Remotes....

    • Klõpsake + nuppu, et lisada uus kaugserver.

    • Nimetage see upstream ja sisestage algse repositooriumi URL.

    • Vajutage OK.

2. Upstream'i seadistamine terminalis:

  • Lisa upstream remote, mis viitab algsele repositooriumile:

git remote add upstream [algse repositooriumi URL]

Praktiline ülesanne: HEAD

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

1. HEAD'i vaatamine ja muutmine PyCharmis:

  • Vaadake, millises harus HEAD praegu asub, vaadates PyCharmi üleval vasakul nurgas, kus on aktiivse haru nimi.

  • Kui soovite HEAD asukohta muuta (näiteks vahetada haru):
    • Klõpsake aktiivse haru nimel ja valige nimekirjast teine haru, kuhu soovite liikuda ning vajutage Checkout.

2. HEAD'i vaatamine terminalis:

git rev-parse --abbrev-ref HEAD

Checkout

Checkout on käsk, mida kasutatakse harude vahetamiseks või working tree failide taastamiseks.

  • Harusse lülitumine: git checkout haru_nimi lülitab keskkonna soovitud harule ja värskendab Sinu töökataloogi, et see vastaks haru viimasele olekule.

  • Commit-i lülitumine: git checkout commit_hash võimaldab Sul vaadata oma projekti seisu konkreetse commit-i ajal. See on kasulik debug-imiseks või varasemate muudatuste ülevaatamiseks.

Praktiline ülesanne: checkout

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

1. Commiti checkoutimine PyCharmi graafilise liidese kaudu:

Commiti ajalugu ja checkoutimine:

  • Avage oma projekt PyCharmis ja minge Giti branch menüüsse all vasakul ning näete seal commit ajalugu.

  • Leidke commit, mida soovite vaadata, ja paremklõpsake sellel.

  • Valige Checkout Revision....

  • PyCharm viib teid automaatselt selle commit'i juurde ja ajutiselt liigub tööpuu sellesse olekusse, nagu see oli selle commit'i tegemise ajal.

2. Commiti checkoutimine terminali kaudu:

git checkout [haru-nimi]

3. Harude checkoutimine PyCharmi kaudu:

Harule liikumine:

  • Üleval vasakul nurgas näete aktiivse haru nime. Klõpsake sellel, et näha kõiki harusid.

  • Valige haru, kuhu soovite liikuda, ja vajutage sellel klõpsates Checkout.

  • PyCharm vahetab koheselt teie tööpuu selle haru commit'ide järgi.

4. Harude checkoutimine terminali kaudu:

git checkout [commit-hash]
  • Sellega ole ettevaatlik, sest muudatused ei ole seotud ühegi haruga.

Näited:

  • Kasutage commit'i checkout'i, kui soovite ajutiselt vaadata, kuidas kood nägi välja varasema commit'i ajal.

  • Kasutage haru checkout'i, kui soovite liikuda erinevate ülesannete vahel või töötada paralleelselt mitmes harus.

Rebase

Rebase Gitis on viis, kuidas lisada muudatusi ühest harust teise - tavaliselt kõrvalhardudest main harusse. Lihtsustatult tähendab rebase commit-ide jada kombineerimist üheks base commit-iks ning enda muudatuste rajamist selle peale, mida kõik teised juba eelnevalt teinud on.

Rebase’i kasutamine aitab hoida projekti ajaloo lineaarsena - arendajad saavad enne main haruga ühendamist oma commit-ide ajaloo tagantjärele korda teha. Näiteks on rebase kasulik olukorras, kus arendaja töötab oma haru kallal, aga samal ajal liigub main haru uuenduste poolest edasi. Arendaja tahaks saada oma harusse main haru uuendusi, aga nii, et jääks mulje, nagu ta oleks kogu aeg ehitanud enda haru main haru kõige uuema versiooni peale. See lihtsustab hiljem uue haru lisamist main harule.

Praktiline ülesanne: rebase

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

1. Rebase'i tegemine PyCharmi graafilise liidese abil:

Alustage rebase'iga:

  • Veenduge, et olete sellel harus, mida soovite rebase'ida (näiteks feature-branch).

  • PyCharmi alumises paremas nurgas klõpsake aktiivse haru nimel ja vahetage vajalikule harule, kui see pole veel õige.

  • Seejärel minge ülemisest menüüst Git > Rebase....

Rebase'i seadistamine:

  • Avaneb dialoogiaken, kus saate valida, millise haru otsa soovite oma muudatused viia. Tavaliselt valite siin main haru.

  • Valige main haru ja vajutage Rebase.

Konfliktide lahendamine (kui neid esineb):

  • Kui rebase'i käigus tekib konflikte, kuvab PyCharm dialoogi, kus saate konflikte lahendada.

  • Lahendage konfliktid samamoodi nagu merge'i konflikti korral, kasutades Merge Conflicts vaadet.

2. Rebase'i tegemine terminali abil:

  • Vaheta harusse, mida soovid rebase'ida (näiteks feature-branch):

git checkout feature-branch
  • Alusta rebase'i põhiharu main otsa:

git rebase main
  • Kui tekivad konfliktid, lahenda need failides ja jätka rebase'i:

git add lahendatud_fail.txt
git rebase --continue
  • Kui soovid rebase'i katkestada:

git rebase --abort
  • Kuna rebase muudab ajalugu, pead push'ima sundimisega:

git push origin feature-branch --force
  • NB! Kasuta --force ettevaatlikult, kuna see kirjutab kaugajalugu üle.

Rebase'i lõpuleviimine ja push'imine:

  • Pärast edukat rebase'imist on teie feature-branch haru ajalugu ümber korraldatud nii, nagu need commit'id oleksid tehtud otse main haru otsas.

  • Kui olete rebase'i edukalt lõpetanud, commit'ige ja push'ige muudatused kaugserverisse:
    • Valige Git > Push... ja push'ige muudatused.

  • Kui olete juba varem push'inud oma haru ja teostate nüüd rebase'i, peate võib-olla kasutama --force (PyCharmi kaudu valikuline "Force Push"), et sundida muudatused serverisse.

Näited:

  • Kasutage rebase, et viia oma töö (commit'id) kooskõlla põhiharuga (main) ja hoida ajalugu puhtana ja loogiliselt järjestatuna.

  • Rebase aitab vältida liigseid merge commit'e, mis muudavad ajalugu keerulisemaks, eriti kui töötate suure meeskonnaga.

Kasutatud allikad