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.