User Tools

Site Tools


project:git_basics

Git osnove

FIXME

Bilješke s Git radionice Code Soup, Dobrice Pavlinušića.

git reset ahead
git commit --ammend
  
git rebase
git diff
git log -f
git grep [nešto]

Zanimljivi projekti koji koriste git:

  • promjene git sprema na razini LINIJA
  • bilo kakve datoteke/formati bazirane na linijama (kicad, SVG)
  • git je distribuiran, svaki repozitorij/fajlovi su prisutni na svakom drugom.
  • preporuča se da promjene budu manje (kako bi se potencijalno mogli iskorisititi i za druge…)
  • git je napravljen za kernel developere
  • u gitu se mogu raditi svoje naredbe
  • gitlab alternativa githubu kad ne zelimo imat javni rep ili ne zelimo platit

remote u git terminologiji je repozitorij koji je negdje drugdje (u drugom direktoriju ili na mreži)

clone kloniranje svega s remote repozitorija i kopiranje na local repozitorij

init uđi u folder, initialize a repository on a new folder or existing one

.git folder u kojem git sprema sve (nije backup) … delete to destroy repository

.gitignore specify files and file patterns for git to ignore (create file: touch .gitignore and add e.g. *.log)

commit changes go to local repo… making safe points…

git commit -m “description” dodavanje opisa uz commit, u protivnom se otvori vim editor

push push changes from local to remote

pull sync lokal s remote repozitorijem. povuci sve promjene s remote repozitorija koje nisu u lokalnom repozitoriju.

rebase (tvoj commit stavlja kao zadnji (na vrhu) master brancha)

pull –rebase ensures that your changes commited localy will always be put on top of anything you pull from remote

rsync je ok način za prebacit repozitorij na drugo računao

git fetch origin s remote repozitirija povuci sve promjene napravljene u međuvremenu (od zadnjeg cloniranja ili fetch-anja)… fetching povuče sve promjene u lokalni repozitorij, ali ih ne merge-a.

git pull origin will automatically fetch and merge the changes from the remote branch into your current branch

git push origin master we are telling git to push our changes to the remote repository known to us as origin and commit them to the master branch

git remote add IME_DODATNOG_REPOZITORIJA http://git adding additional remote repositories

diff (pogledaj trenutno stanje u odnosu na master)

git log -p

git grep (grepa samo kroz stvari koje su u samom gitu (commitovima); kao grep ali na manjem setu fajlova)

git grep -i (case insensitive)

git status check status of the repository … what files are untracked

git add stage a file for commit

pre commit hook (nešto što se projavi prije comminta pa se može nešto napraviti npr. izbrisati spejsove (davor!))

git squash (sve squasha u jedan commit)
git patch (slicno ali bez kreiranja novog brancha)

git cherry pick (?)

pre commit ogranicavanje usera

HEAD (teoretski trenutni zadnji commit)

git commit -m “description”
git push

git add . (“.” stage everything in current directory)
git add *
git add *.txt

git branch IME_NOVOG_BRANCHA create new branch

git checkout IME_NOVOG_BRANCHA

git checkout master switch back to the main branch

git merge IME_NOVOG_BRANCHA … ali i potencijalni konflikti…

Primjer grupnog rada

(Dobrica je kreirao github repozitorij)

git clone https://github.com/username/radiona-git-soup
cd radiona-git-soup/
ls
git add *
git status
git commit
git log
git commit
git log
git push

— nakon konflikta

git remote add dpavlin https://github.com/dpavlin/radiona-git-soup

git remote -v (ispisuje sve repozitorije koje mogu koristit lokalno)

git fetch dpavlin (povlači i na disk spremi promjene, ali ih ne apply-a na lokalne fajlove na disku)

git pull dpavlin master (pull?)

git status (kad god je neka nejasnoca)

git rm README (brisanje file)

ls

git diff (ispisivanje razlike između lokalne i remote verzije)

git commit (lokalno primjeniš promjene)

git push (gurni remote)

git log –oneline –graph –decorate (ascii grafovi)

git commit –amend (modificiraj zadnji commit koji si napravio, nadoštukaš :)

git show SHA (hash) (promjene u tom commit-u)

git revert SHA (makne commit)

git rebase git reset HARD

(trenutno smo u neobičnoj situaciji :)

git rebase -i (sve komite iza nekog ce otvoriti u editoru)

drop (izbaci pojedini commit)

otišli smo u povijest i nešto izmjenili. a to nije uredu! napravili smo sr*nje :)

SHA ovisi i o prošlim commitovima, što znači da ako nešto promjenimo (rebase) mjenjaju se i SHA-ove. To je razlog zasto izbjegavamo rebase ako su i drugi contributory ukljuceni.

git push -f (izvlacenje iz situacije)

Merge-anje submodula u jedan

primjer f32c

mkdir subodules/
cd sumbodules/
mkdir f32c/
cd f32c/
git init
git submodule add https://github.com/f32c/f32c
git submodule add https://github.com/f32c/arduino
git status (javlja promjene)
git commit
git sumbodules init
git submodules update
git submodules foreach git diff

Korištenje tagova

Tags (human readable name za neki commit)
Za svaki commit mozemo dati tag koji dohvaćamo isto kao i preko SHA

Pre commit skripta

Dobrica&Davor script. Remove whitespace from end of lines. Kako se koristi?

#!/bin/sh
 
# remove whitespace from end of lines
 
git diff --name-only --cached | while read file ; do
 
egrep '[ 
]+$' $file && cat $file | sed 's/[ \r]\+$//g' > $file.new && mv $file.new $file || exit 0
 
done
 
# CR:
project/git_basics.txt · Last modified: 2017/07/19 15:54 by dp