1. GIT

1.1. Wprowadzenie

1.1.1. Opis dostępnych darmowych klientów gita

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

1.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”)

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

1.4. Pozostałe

git clean -f -d git reset –hard HEAD slajdy z .gitconfigiem

1.5. Przykłady praktyczne

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

1.6. Zadania praktyczne

1.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)

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

1.6.3. Zarządanie remote

  • tworzenie oraz usuwanie zdalnych branchy
  • pushowanie zmian
  • pobieranie zmian

1.6.4. Submoduły

  1. Jako submoduł dodaj Reveal.JS
  2. Zainicjalizuj go
  3. Zaciągnij najnowsze informacje

1.6.5. Hook: Pre-Commit - commit message

Stwórz hook aby wymuszał w nazwie commita ID issues z Jiry

1.6.6. Hook: Pre-Commit - branche

Stwórz hook aby do commit message dodawał ID z nazwy brancha

1.6.7. Hook: Pre-Commit - Testy

Stwórz hook aby przy każdym commicie uruchamiał testy dla HabitatOS

1.6.8. Hook: Post Commit

Wyślij majla podsumowującego commita

1.6.9. Hook: Pre-Receive

Zablokuj otrzymywanie danych, jeżeli w commit message nie znajduje się issue z Jiry

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

1.6.11. fsck and gc

Przeprowadź pełne git fsck --full na repozytorium, a następnie uruchom git gc --aggressive --prune=now