Next revision
|
Previous revision
|
dev:git [2022/01/26 11:37] 127.0.0.1 external edit |
dev:git [2025/01/14 13:26] (current) tomas [užitešné nástroje] |
[[https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/best-practices|Best practice]]\\ | [[https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/best-practices|Best practice]]\\ |
[[https://www.atlassian.com/git/tutorials/comparing-workflows/centralized-workflow|Tutorial on workflow]]\\ | [[https://www.atlassian.com/git/tutorials/comparing-workflows/centralized-workflow|Tutorial on workflow]]\\ |
| |
| ====užitečné nástroje==== |
| [[https://pre-commit.com|pre-commit]] ... automatické akce v případě volání git hooku, jako třeba git commit. Např automaticky zformátuje a zvaliduje kód\\ |
| conventional commits ... prefix konvence commitů pro lepší rozpoznání účelu a pro automatické generování changelogu\\ |
| sme\\ |
| [[https://github.com/cookpete/auto-changelog|auth-changelog]] ... automatické generování changelogů\\ |
| [[https://medium.com/opensight-ch/git-semantic-versioning-and-conventional-commits-564aece418a0|článek]] o použití sematického verzování, conventional commits, release note, change logu atd\\ |
| |
====git promenne==== | ====git promenne==== |
''git config %%--%%global user.name "John Doe"''\\ | ''git config %%--global user.name "John Doe"%%''\\ |
''git config %%--%%global user.email johndoe@example.com''\\ | ''git config %%--%%global user.email johndoe@example.com''\\ |
''git config %%--%%list'' ... seznam promennyh\\ | ''git config %%--%%list'' ... seznam promennyh\\ |
''git config %%--%%list %%--%%system' ... zobrazi systemove promenne\\ | ''git config %%--list --%%system'' ... zobrazi systemove promenne\\ |
''git config %%--%%list %%--%%global' ... zobrazi globalni promenne\\ | ''git config %%--list --%%global'' ... zobrazi globalni promenne\\ |
''git config %%--%%global alias.co checkout'' ... aliasy\\ | ''git config %%--%%global alias.co checkout'' ... aliasy\\ |
''git config %%--%%global credential.helper cache'' ... cachovane kredence\\ | ''git config %%--%%global credential.helper cache'' ... cachovane kredence\\ |
| |
====Prace s kodem, schvalovani zmen, historie==== | ====Prace s kodem, schvalovani zmen, historie==== |
git status ... aktualni vetev a zmeny v ni\\ | ''git status'' ... aktualni vetev a zmeny v ni\\ |
git status -s ... aktualni zmeny - 1 soubor = 1 radek\\ | ''git status -s'' ... aktualni zmeny - 1 soubor = 1 radek\\ |
git add service_scanner.sh *.txt ... pridani souboru do stage - kontrola GITem, po commitu se to ulozi k dane verzi projektu\\ | ''git add service_scanner.sh *.txt'' ... pridani souboru do stage - kontrola GITem, po commitu se to ulozi k dane verzi projektu\\ |
git commit -m "komentar k commitnuti" ... potvrzeni kodu k odeslani u vsech souboru pridanych pomoci add\\ | ''git blame -L 5,10 helm/values.yaml'' ... ukaze autory jednotlivych radku\\ |
git commit --amend ... oprava posledniho commitu\\ | ''%%git commit -m "komentar k commitnuti"%%'' ... potvrzeni kodu k odeslani u vsech souboru pridanych pomoci add\\ |
git reset HEAD service_scanner.sh ... odebere soubor service_scanner z commitu\\ | ''git commit --amend'' ... oprava posledniho commitu\\ |
git reset --hard origin/dev ... prepise na tvrdo lokalni zmeny ?\\ | ''%%git commit --fixup 1e30877%%'' ... commitne zmeny jako opravu commitu 1e30877\\ |
git checkout -- service_scanner.sh ... vrati zmeny z service_scanner.sh, ktere jsme provedli v souboru\\ | ''git reset HEAD service_scanner.sh'' ... odebere soubor service_scanner z commitu\\ |
| ''%%git reset --hard origin/dev%%'' ... prepise na tvrdo lokalni zmeny ?\\ |
| ''%%git checkout -- service_scanner.sh%%'' ... vrati zmeny z service_scanner.sh, ktere jsme provedli v souboru\\ |
[[https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History|git log]] ... seznam historie commitu - check sum, popis, datum, autor\\ | [[https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History|git log]] ... seznam historie commitu - check sum, popis, datum, autor\\ |
git log --pretty=oneline ... jednoradkovy, pouze check sum a popis\\ | ''git log --pretty=oneline'' ... jednoradkovy, pouze check sum a popis\\ |
git log -p ... ukaze historii i se zmenama\\ | ''git log -p'' ... ukaze historii i se zmenama\\ |
git log --stat ... ukaze jen statistiky zmen\\ | ''git log --stat'' ... ukaze jen statistiky zmen\\ |
git show ... ukaze posledni zmeny\\ | ''%%git log --oneline -5 --author lipensky --before "Fri Mar 26 2009"%%'' ... filtr pro log\\ |
git diff ... porovna zmeneny soubor oproti puvodnimu (z git lokalnih repozitare)\\ | ''git show'' ... ukaze posledni zmeny\\ |
| ''git diff'' ... porovna zmeneny soubor oproti puvodnimu (z git lokalnih repozitare)\\ |
.gitignore ... ignore list pro stage a commit\\ | .gitignore ... ignore list pro stage a commit\\ |
git rm a.txt ... odebere z repozitare a.txt\\ | ''git rm a.txt'' ... odebere z repozitare a.txt\\ |
git mv b.txt a.txt ... prejmenuje v repu b.txt na a.txt\\ | ''git mv b.txt a.txt'' ... prejmenuje v repu b.txt na a.txt\\ |
| |
| ''git reflog'' ... seznam zmen\\ |
| ''git revert'' ... vrati zmeny\\ |
| ''git reset'' ... pozor, muze byt nebezpecne, ztrata zmen\\ |
| ''%%git rebase -i --autosquash 7dbe2a9%%'' ... rebase - slouci fixupy (opravy), otevre v rebase interaktivnim modu\\ |
| ''git merge origin master'' ... udela pull commitu z masteru a jejich merge do aktualni vetve\\ |
| ''git rebase -i HEAD~3'' ... rebase poslednich 3 commitu\\ |
| ''git shortlogs'' ... vylistuje comity podle autoru\\ |
| ''git gc'' ... garbage collection\\ |
| |
git reflog ... seznam zmen\\ | |
git revert ... vrati zmeny\\ | |
git reset ... pozor, muze byt nebezpecne, ztrata zmen\\ | |
git gc ... garbage collection\\ | |
====Tagy==== | ====Tagy==== |
Vice info: [[https://git-scm.com/book/en/v1/Git-Basics-Tagging]] | Vice info: [[https://git-scm.com/book/en/v1/Git-Basics-Tagging]] |
| |
''git tag -a 1.0.1 -m %%"%%applied hotfix 1%%"%%'' ... prida tag k posledni zmene (commitu)\\ | ''%%git tag -a 1.0.1 -m "applied hotfix 1"%%'' ... prida tag k posledni zmene (commitu)\\ |
''git tag -a 1.0.0 -m %%"%%initial version%%"%% 20721acbb115cc33848dfcc21'' ... otaguje commit, jehoz check sum, nebo jeho cast je v parametru\\ | ''git tag -a 1.0.0 -m %%"initial version"%% 20721acbb115cc33848dfcc21'' ... otaguje commit, jehoz check sum, nebo jeho cast je v parametru\\ |
''git show 1.0.1'' ... ukaze zmeny pro dany tag\\ | ''git show 1.0.1'' ... ukaze zmeny pro dany tag\\ |
''git tag'' ... seznam tagu\\ | ''git tag'' ... seznam tagu\\ |
''git tag pracovni'' ... prida lehky tag - bez komentaru, k posledimu commitu\\ | ''git tag pracovni'' ... prida lehky tag - bez komentaru, k posledimu commitu\\ |
''git tag -l %%"%%prac*%%"%%'' ... vylistuje vsechny tagy, co zacinaji na prac\\ | ''git tag -l %%"prac*"%%'' ... vylistuje vsechny tagy, co zacinaji na prac\\ |
''git push REMOTE TAG'' ... odesle zmeny do repozitare REMOTE s tagem TAG, jinak se tagy neprenasi\\ | ''git push REMOTE TAG'' ... odesle zmeny do repozitare REMOTE s tagem TAG, jinak se tagy neprenasi\\ |
''git push REMOTE %%--%%tags'' ... odesle zmeny do repozitare, prenese i tagy\\ | ''git push REMOTE %%--%%tags'' ... odesle zmeny do repozitare, prenese i tagy\\ |
'git notes add -m "Zkontrolovano 2019/05/12' ... pridani note\\ | ''%%git notes add -m "Zkontrolovano 2019/05/12"%%'' ... pridani note\\ |
| |
====Vetve / branches==== | ====Vetve / branches==== |
git commit -a -d %%"%%oprava hotfix1%%"%% ... add (-a = add na vsechny soubory, co se zmenily) a commit (schvaleni zmen)\\ | git commit -a -d %%"%%oprava hotfix1%%"%% ... add (-a = add na vsechny soubory, co se zmenily) a commit (schvaleni zmen)\\ |
git checkout master ... prepne zpet do puvodni vetve\\ | git checkout master ... prepne zpet do puvodni vetve\\ |
git merge hotfix1 ... sjednoti zmeny - prijme zmeny z hotfixu do aktualni branche\\ | |
git branch -d hotfix1 ... smaze vetev hotfix1\\ | git branch -d hotfix1 ... smaze vetev hotfix1\\ |
git branch ... seznam vetvi, ukaze aktualni\\ | git branch ... seznam vetvi, ukaze aktualni\\ |
git checkout -b hotfix1 origin/hotfix1 ... vytvori novou lokalni vetev - kopii vzdalene vetve hotfig1\\ | git checkout -b hotfix1 origin/hotfix1 ... vytvori novou lokalni vetev - kopii vzdalene vetve hotfig1\\ |
| git rebase master ... jako merge, ale není fast forward, feature branch A-B-C-D, master branch A-B-E-F, vysledek A-B-E-F-C-D |
| git merge master ... sjednoti zmeny - prijme zmeny z master do aktualni branche, feature branch A-B-C-D, master branch A-B-E-F, vysledek A-B-C-D-E-F\\ |
| |
| ====git vnitrnosti==== |
| git count-objects -v ... statistiky objektu\\ |
| |
====git flow==== | ====git flow==== |
curl -k --header %%"%%PRIVATE-TOKEN: $TOKEN%%"%% https://gitlab.url.com/api/v3/groups/my-group 2>/dev/null | grep -o "[^,\"]\+:my-group/[^,\"]\+\.git" ... url na vylistovani objektu grupy\\ | curl -k --header %%"%%PRIVATE-TOKEN: $TOKEN%%"%% https://gitlab.url.com/api/v3/groups/my-group 2>/dev/null | grep -o "[^,\"]\+:my-group/[^,\"]\+\.git" ... url na vylistovani objektu grupy\\ |
| |
| ====Scenare==== |
| ==procisteni .git adresare== |
| Zdroj: [[https://stackoverflow.com/questions/5613345/how-to-shrink-the-git-folder]]:\\ |
| ``` |
| git clone remote-url |
| for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do |
| git branch --track ${branch##*/} $branch |
| done |
| |
| #!/bin/bash |
| #set -x |
| |
| # Shows you the largest objects in your repo's pack file. |
| # Written for osx. |
| # |
| # @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/ |
| # @author Antony Stubbs |
| |
| # set the internal field spereator to line break, so that we can iterate easily over the verify-pack output |
| IFS=$'\n'; |
| |
| # list all objects including their size, sort by size, take top 10 |
| objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head` |
| |
| echo "All sizes are in kB. The pack column is the size of the object, compressed, inside the pack file." |
| |
| output="size,pack,SHA,location" |
| for y in $objects |
| do |
| # extract the size in bytes |
| size=$((`echo $y | cut -f 5 -d ' '`/1024)) |
| # extract the compressed size in bytes |
| compressedSize=$((`echo $y | cut -f 6 -d ' '`/1024)) |
| # extract the SHA |
| sha=`echo $y | cut -f 1 -d ' '` |
| # find the objects location in the repository tree |
| other=`git rev-list --all --objects | grep $sha` |
| #lineBreak=`echo -e "\n"` |
| output="${output}\n${size},${compressedSize},${other}" |
| done |
| |
| echo -e $output | column -t -s ', ' |
| |
| git filter-branch --tag-name-filter cat --index-filter 'git rm -r --cached --ignore-unmatch filename' --prune-empty -f -- --all |
| |
| rm -rf .git/refs/original/ |
| |
| git reflog expire --expire=now --all |
| |
| git gc --prune=now |
| |
| git gc --aggressive --prune=now |
| git push origin --force --all |
| git push origin --force --tags |
| ``` |
| |