GIT - demonstracija osnovnog rada # Napraviti novi rep na githubu, (privatni/javni), ne ga inicijalizirati # Npr. github.com:ljelenkovic/proba # Napraviti sadržaj koji će ići u repozitorij, lokalno mkdir proba cd proba echo "# Primjer repozitorija" > README.md # > stavlja u datoteku, briše prethodni sadržaj ako postoji! echo "Primjer koristenja jednostavnih git naredbi" >> README.md # >> nadodaje na postojeću datoteku pico hello.c # Upisati jednostavan "Hello World" progam # npr. c/p sa https://github.com/ljelenkovic/example/) # Dodati .gitignore, npr. s iste adrese # Inicijalizirati repozitorij lokalno, preko naredbi u uputama: git init git config user.name "Leonardo Jelenkovic" git config user.email "leonardo.jelenkovic@fer.hr" git remote add origin git@github.com:ljelenkovic/proba.git git add . git commit -m "Pocetno stanje" git push -u origin master # Dohvat repozitorija koji postoji ali nema ga lokalno # Za primjer, u drugom terminalu napraviti git clone git clone git@github.com:ljelenkovic/proba.git proba2 # napraviti će ga u direktoriju proba2 # Opcionalno se predstaviti kao netko drugi! git config user.name "Netko Drugi" git config user.email "netko.drugi@negdje.hr" # Promijeniti nešto u drugom terminalu, git add, commit, push # (ili koristiti funkciju lazygit, opisanu na kraju, ali oprezno!) # U prvom napraviti git pull (ažuriranje postojećeg repozitorija promjenama # koje je netko drugi napravio na git poslužitelju) git pull # Ima li lokalnih promjena? git status # Koje su promjene napravljene? git diff Dodavanje lokalnih promjena u lokalni repozitorij: git add datoteka # ili više datoteka/direktorija - označavanje koje promjene dodati git commit -m "kratki opis promjene" # dodavanje u repozitorij ("index") git status # Lokalnih promjena u repozitoriju može biti i više. # Napravi promjenu i u drugom repozitoriju # Postavljanje tih promjena na git poslužitelj: # Prvo, opcionalno, ako možda tamo ima i neka promjena koja nije još # evidentirana dohvatiti takvu promjenu git pull # Ako ima takvih, onda su prethodnom naredbom spojene u novu Postavljanje promjene na udaljeni repozitorij (npr. github) $ git push # lazygit - skratiti broj naredbi za dodavanje u repozitorij # U .bashrc (u početnom /home/ direktoriju dodati function lazygit() { git add * git commit -m "$1" git push } # Sada umjesto git add+commit+push: lazygit "opis promjene" # Ali oprezno, maknuti prije višak datoteka, da se ne dodaju datoteke # koje tamo ne trebaju biti (.o i slične)! # # Malo naprednije stvari, nisu potrebne za OS-Math # reset, revert, # opis: https://opensource.com/article/18/6/git-reset-revert-rebase-commands git reset # vraća se na zadano stanje kao glavno/head # (odbacuje sve iduće promjene, "briše ih") git revert # poništava promjene koje su napravljene u tom dodatku (tom commitu) # uz ove promjene vjerojatno treba zastavica --force uz git push # git restore git restore -s # Npr. git restore -s b13a90c1f1722aa4c1ce97f9ffbee9f562e5d18c . # će u "working directory" postaviti stanje kakvo je bilo u tom dodatku/commitu # To stanje onda treba dodati (add/commit/push) u novi dodatak # Naredba "reset" briše odbačene promjene, dok "restore" ih "poništava", ali # su i dalje prisutne kroz povijest promjena. # stash: https://opensource.com/article/21/4/git-stash # Pohraniti trenutne promjene koje nisu dodane (add/commit) na "stog" # Onda raditi štogod, npr. pomaknuti se u drugu granu, te vratiti/primijeniti # te promjene na stogu git stash (-a) git stash list/pull/clear/show/"drop id" # Konflikti i njihovo rješavanje (osnovno), kroz rad s granama # - ideja grana je da se prije dodavanja u "master" prvo testira, # a onda kad je sve OK doda u master korištenjem spajanja te grane (merge) # - npr. iz grane master nastaje grana modul42 gdje se nešto napravi # - ako je to OK, onda se može spojiti s masterom na slijedeći način git checkout master git merge modul42 # - spajanje može biti problematično ako ima konfliktnih promjena s masterom # (možda se i on mijenjao, npr. neke druge grane su se u međuvremenu # spojile u njega) # * u tom slučaju treba rješiti konflikte # - o tome više negdje drugdje, ovdje samo dvije naredbe za odbacivanje # promjena nastalih pokušajem spajanja git merge --abort git reset (opisan prije)