Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
149 lines (123 sloc) 4.43 KB

GIT

Wprowadzenie

Opis dostępnych darmowych klientów gita

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

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

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

Pozostałe

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

Przykłady praktyczne

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

Zadania praktyczne

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)

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

Zarządanie remote

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

Submoduły

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

Hook: Pre-Commit - commit message

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

Hook: Pre-Commit - branche

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

Hook: Pre-Commit - Testy

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

Hook: Post Commit

Wyślij majla podsumowującego commita

Hook: Pre-Receive

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

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

fsck and gc

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