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:
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…
(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)
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
Tags (human readable name za neki commit)
Za svaki commit mozemo dati tag koji dohvaćamo isto kao i preko SHA
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: