Systemy kontroli wersji

Na przykładzie GIT

Prelegent: Tomasz Banasiak

Systemy kontroli wersji - GIT

Porozmawiajmy o życiu

Systemy kontroli wersji - GIT

Systemy kontroli wersji - GIT

Systemy kontroli wersji - GIT

Systemy kontroli wersji - GIT

Systemy kontroli wersji - GIT

Potrzeby stojące za powstaniem CVS

  • Możliwość wrócenia do dowolnej wersji pliku
  • Praca zespołowa nad jednym plikiem
  • Praca nad projektami Open Source
  • Ustalanie odpowiedzialności za zmiany
  • Wykonywanie kopii zapasowych
  • Automatyzacja procesu Code Review

Systemy kontroli wersji - GIT

Co to jest kontrola wersji?

  • Narzędzie zapisujące stan pliku 
  • Narzędzie kooperacji deweloperów
  • System pozwalający jednocześnie utrzymywać i rozwijać aplikację

Systemy kontroli wersji - GIT

Rozpoczynamy pracę z GIT

1. Utworzenie własnego repozytorium

git init

2. Pobranie istniejącego repozytorium

git clone git@gitlab:22/devschool/testrepo.git

Systemy kontroli wersji - GIT

Stan repozytorium

Dysk                                  Indeks GIT                        Repozytorium

Systemy kontroli wersji - GIT

Umieszczenie plików w indeksie

Dodanie plików do indeksu

git add . # dodanie wszystkich plików
git add nazwapliku.txt # dodanie konkretnego pliku
git add *.php # dodanie plików według maski

Systemy kontroli wersji - GIT

Stan repozytorium

Dysk                                  Indeks GIT                        Repozytorium

Systemy kontroli wersji - GIT

Umieszczenie plików w repozytorium

Zapisanie aktualnej wersji 

git commit -m "Dodanie plików tekstowych"

Systemy kontroli wersji - GIT

Stan repozytorium

Dysk                                  Indeks GIT                        Repozytorium

Hash: 3jh23skw

Dodanie plików te...

Systemy kontroli wersji - GIT

Stan repozytorium

Dysk                                  Indeks GIT                        Repozytorium

Hash: 3jh23skw

Dodanie plików te...

Hash: a981kj1

Zmiany w plika...

Systemy kontroli wersji - GIT

Jak GIT przechowuje pliki

Hash: 3jh23skw

Dodanie plików tekstowych

Hash: a981kj1

Zmiany w plikach: dodanie i usunięcie

Systemy kontroli wersji - GIT

Synchronizacja danych z innymi

Pobranie zmian dokonanych przez programistów

# Pobranie gałęzi master z głównego repozytorium
git pull origin master 

# Pobranie gałęzi develop z zadanego repozytorium
git pull ssh://git@gitrepo:22 develop

# Zdefiniowanie własnego zewnętrznego repo i pobranie zmian
git remote add piotrek ssh://192.168.0.123:22
git pull piotrek master 

Systemy kontroli wersji - GIT

Synchronizacja danych z innymi

Wysłanie własnych zmian

git push origin master # Wysłanie własnych commitów 

Systemy kontroli wersji - GIT

Przeglądanie zmian w repozytorium

Przeglądanie zmian w indeksie

git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in
#         working directory)
#
#   [+] szkolenie.txt    
#
no changes added to commit (use "git add" and/or "git commit -a")

Systemy kontroli wersji - GIT

Przeglądanie zmian w repozytorium

Przeglądanie zmian w repozytorium

git log
commit 16b36c697eb2d24302f89aa22d9170dfe609855b
Author: Tomasz Banasiak <tomasz@banasiak.pro>
Date:   Fri Jan 25 17:31:57 2014 -0200

    Dodanie plików tekstowych
	
commit 34lnj34j2312lll1l293s0dffds09awleflsder9
Author: Tomasz Banasiak <tomasz@banasiak.pro>
Date:   Fri Jan 25 17:48:57 2014 -0200

    Modyfikacja plików: zmiana i usunięcie plik.txt

Systemy kontroli wersji - GIT

Przeglądanie zmian w repozytorium

Systemy kontroli wersji - GIT

Praca na gałęziach (branching)

Systemy kontroli wersji - GIT

Gałęzie

Aplikacja v. 1.0

Aplikacja v. 1.1

Aplikacja v. 2.0

Funkcja 1

Funkcja 2

Systemy kontroli wersji - GIT

Tworzenie gałęzi w GIT

# uaktualnienie lokalnych danych
git pull origin develop 

# utworzenie gałęzi my-branch i przełączenie się na nią
git checkout -b my-branch 

Systemy kontroli wersji - GIT

Przełączanie gałęzi w GIT

# przełączenie na gałąź develop
git checkout develop

Systemy kontroli wersji - GIT

Łączenie gałęzi

# gdzie jesteśmy?
git branch
  develop
* my-branch

# przełączamy się na develop
git checkout develop 

# zmergowanie gałęzi my-branch do gałęzi develop
git merge my-branch 

Systemy kontroli wersji - GIT

Praca na gałęziach

Systemy kontroli wersji - GIT

Dobra praktyka pracy na gałęziach

Systemy kontroli wersji - GIT

Dobra praktyka pracy na gałęziach

Systemy kontroli wersji - GIT

Dobra praktyka pracy na gałęziach

Systemy kontroli wersji - GIT

Dobra praktyka pracy na gałęziach

Systemy kontroli wersji - GIT

Dobra praktyka pracy na gałęziach

Systemy kontroli wersji - GIT

Dobra praktyka pracy na gałęziach

Systemy kontroli wersji - GIT

Prace developerskie

  • wydzielamy feature z gałęzi develop

    • git checkout -b feature/my-branch
  • pracujemy na własnym branchu (modyfikujemy kod)

    • git add . && git commit -m "Modified"
  • swoje zmiany wysyłamy do głównego repozytorium

    • git push origin feature/my-branch
  • po zakończeniu prac w GitLabie tworzymy merge request: feature/my-branch -> develop

Systemy kontroli wersji - GIT

Skomplikowane?

Systemy kontroli wersji - GIT

Jest ratunek!

Systemy kontroli wersji - GIT

Systemy kontroli wersji - GIT

Bez GitFlow

git branch  # gdzie jesteśmy?
* feature/new-function
  develop
  master
git checkout master # przełączamy aktualną gałąź na master
git pull origin master # pobieramy zmiany dokonane przez innych
git checkout -b hotfix/fix-for-boss # tworzymy nową gałąź na poprawkę
// .. poprawiamy pliki
git add .
git commit -m "Fixed price table"
git checkout master # przełączamy aktualną gałąź znów na master
git merge hotfix/fix-for-boss # dołączamy zmiany
git push origin master # Wrzucamy na główny serwer zmiany z poprawki

Systemy kontroli wersji - GIT

Bez GitFlow - potencjalne błędy

  • Wydzielenie poprawki z develop zamiast z mastera
  • Domergowanie poprawki nie do tej gałęzi co trzeba
  • Pominięcie domergowania poprawki do develop

Systemy kontroli wersji - GIT

Z GitFlow

git flow hotfix start fix-for-boss # rozpoczynamy nowy hotfix
// .. poprawiamy pliki
git add .
git commit -m "Fixed price table"
# kończymy prace nad poprawką, wszystko działa!
git flow hotfix finish fix-for-boss 
git push origin master # Wrzucamy na główny serwer zmiany z poprawki

Systemy kontroli wersji - GIT

Z GitFlow - potencjalne błędy

  • Pominięcie git push origin master ;)

Systemy kontroli wersji - GIT

  • GitFlow to tylko nakładka

  • Jest prosty - to tylko 5 komend do zapamiętania!

  • Wprowadza porządek i jednolite zasady

  • Dla kochających klikać istnieje narzędzie SourceTree

 

GitFlow

Systemy kontroli wersji - GIT

Power Tools

 

 

git bisect

 

git cherry-pick

 

git stash

 

Systemy kontroli wersji - GIT

git bisect

git bisect good

git bisect good/bad

Czy działa? 

08b9bd41723a0a23687c59033c15d66c1840b4f3 is the first bad commit
commit 08b9bd41723a0a23687c59033c15d66c1840b4f3
Author: Czeslaw Programista
Date: Thu Jan 29 12:29:59 2011 +0200

Poprawilem blad z zapisywaniem danych do sesji.

Systemy kontroli wersji - GIT

git cherry-pick

master                        feature

git cherry pick a3u11

Systemy kontroli wersji - GIT

git stash

Dysk                                  Indeks GIT                        Repozytorium

Hash: 3jh23skw

Jakieś zmienione pliki

Systemy kontroli wersji - GIT

git stash

Dysk                                  Indeks GIT                        Repozytorium

Hash: 3jh23skw

Jakieś zmienione pliki

Systemy kontroli wersji - GIT

git stash

Dysk                                  Indeks GIT                        Repozytorium

Hash: 3jh23skw

Jakieś zmienione pliki

Systemy kontroli wersji - GIT

Pytania? 

Systemy kontroli wersji - GIT

Dziękuję za uwagę!

Kontakt ze mną:

E-mail: tomasz.banasiak@rst.com.pl

WEB:    http://banasiak.pro

Systemy kontroli wersji - GIT

Pytania! 

Made with Slides.com