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

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

  1. Anatomia

  2. jak git przechowuje informacje o wersjach

  3. jak są one ze sobą powiązane

  4. jak przechowywane są informacje o branchach i tagach,

  5. 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

  1. Jako submoduł dodaj Reveal.JS

  2. Zainicjalizuj go

  3. 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

  1. Jako subtree dodaj Reveal.JS

  2. Zainicjalizuj go

  3. Zaciągnij najnowsze informacje

  4. Wypushuj go do jako branch w swoim repozytorium

  5. Zaktualizuj plik zdalnie

  6. 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.