3. Git
Warning
There's much more information at my slides https://www.slideshare.net/astrotech/git-training-course Those slides will be converted to the book format with time.
3.1. Wprowadzenie
[com19]
3.1.1. Opis dostępnych darmowych klientów gita
3.2. Podstawy git
konfiguracja nazwy użytkownika, adresu e-mail i parametr autocrlf
rozróżnienie konfiguracji globalnej i lokalnej
zakładanie lokalnego repozytorium oraz jego wewnętrzna struktura
repozytorium bare
repozytorium normalne
podstawowe operacje
sprawdzenie statusu kopii roboczej
obsługa git staging area (aka git index)
zapisywanie zmian w repozytorium (commit)
przeglądanie historii zmian w repozytorium
ignorowanie zbędnych plików
obsługa git diff (podgląd zmian wprowadzanych przez commit/commity oraz w kopii roboczej i staging area)
obsługa git reset
3.2.1. Git Internals
Anatomia
jak git przechowuje informacje o wersjach
jak są one ze sobą powiązane
jak przechowywane są informacje o branchach i tagach,
co to są „referencje”)
3.3. Pojęcia zaawansowane
schowek – stash
shelve
moduły zależne - submodule
odnajdowanie „winnych” – blame
ostatnia deska ratunku – reflog
wyszukiwanie miejsca regresji – bisect
cofanie pojedynczego commitu
„zaawansowane” opcje konfiguracji
pielęgnacja repozytorium – fsck, gc
git fat i inne przydatne pluginy
git hooks
3.4. Pozostałe
git clean -f -d git reset --hard HEAD slajdy z .gitconfigiem
3.5. Przykłady praktyczne
3.5.1. Jenkins + Git Bisect Run
plugin "Downstream-Ext"
dodatkowy projekt "...-blame"
email notyfikacje
Build other projects (extended) -> Build result is FAILURE
$ git bisect start @ # startujemy git bisect z obecnym commitem jako bad
$ git bisect good `git rev-list --max-parents=0 @` # dobry commit - początek repo, można przekazać inny commit żeby nie zaczynać zawsze od początku
$ git bisect run ./test.sh # zestaw testów gdzie exit code > 0 oznacza bad commit
$ git log --format="%ae" # wylistowanie emaila osoby która wprowadziła buga
$ git bisect reset # zakończenie pracy z bisectem
3.6. Zadania praktyczne
3.6.1. Praca na commitach
inicializacja oraz sprawdzenie statusu repozytorium
dodawanie oraz commitowanie zmian
ignorowanie plików oraz katalogów
resetowanie stanu repozytorium
obsługa branch'y
co to jest master, HEAD, HEAD~1, HEAD^1
tworzenie, usuwanie oraz przełączanie między branchami
rozróżnienie branchy lokalnych, lokalnych-zdalnych oraz zdalnych
tworzenie branchy „śledzących” (tracking branches)
co to jest 'detached HEAD'
operacje merge, rebase, cherry-pick
rozwiązywanie konfliktów
edycja commitów (edycja commit message, łączenie commitów)
3.6.2. Manipulacja branchami
przeprowadzenie operacji merge (fast-forward i non fast-forward), rebase, cherry pick + rozwiązywanie konfliktów
tworzenie branchy
praca ze zdalnym repozytorium
operacje clone, push, fetch, pull
czym różni się fetch od pull
tworzenie oraz usuwanie zdalnych branchy
3.6.3. Zarządanie remote
tworzenie oraz usuwanie zdalnych branchy
pushowanie zmian
pobieranie zmian
3.6.4. Submoduły
Jako submoduł dodaj Reveal.JS
Zainicjalizuj go
Zaciągnij najnowsze informacje
3.6.5. Hook: Pre-Commit - commit message
Stwórz hook aby wymuszał w nazwie commita ID issues z Jiry
3.6.6. Hook: Pre-Commit - branche
Stwórz hook aby do commit message dodawał ID z nazwy brancha
3.6.7. Hook: Pre-Commit - Testy
Stwórz hook aby przy każdym commicie uruchamiał testy dla HabitatOS
3.6.8. Hook: Post Commit
Wyślij majla podsumowującego commita
3.6.9. Hook: Pre-Receive
Zablokuj otrzymywanie danych, jeżeli w commit message nie znajduje się issue z Jiry
3.6.10. Subtree
Jako subtree dodaj Reveal.JS
Zainicjalizuj go
Zaciągnij najnowsze informacje
Wypushuj go do jako branch w swoim repozytorium
Zaktualizuj plik zdalnie
Zaciągnij lokalnie zmiany
3.6.11. fsck and gc
Przeprowadź pełne git fsck --full
na repozytorium, a następnie uruchom git gc --aggressive --prune=now
3.7. More information
Warning
There's much more information at my slides https://www.slideshare.net/astrotech/git-training-course Those slides will be converted to the book format with time.