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
git pull origin master # Pobranie gałęzi master z głównego repozytorium
git pull ssh://git@gitrepo:22 develop # Pobranie gałęzi develop z zadanego repozytorium
git remote add piotrek ssh://192.168.0.123:22
git pull piotrek master # Zdefiniowanie własnego zewnętrznego repo i pobranie zmian
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
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
git pull origin develop # uaktualnienie lokalnych danych
git checkout -b my-branch # utworzenie gałęzi my-branch i przełączenie się na nią
Systemy kontroli wersji - GIT
Przełączanie gałęzi w GIT
git checkout develop # przełączenie na gałąź develop
Systemy kontroli wersji - GIT
Łączenie gałęzi
git branch
develop
* my-branch
git checkout develop # przełączamy się na develop
git merge my-branch # zmergowanie (połączenie) gałęzi my-branch do gałęzi develop
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 dokonane w naszej gałęzi
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"
git flow hotfix finish fix-for-boss # kończymy prace nad poprawką, wszystko działa!
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
Systemy kontroli wersji - GIT
Pytania?
Systemy kontroli wersji - GIT
Pytania!
1. Jakie polecenia trzeba wykonać, aby plik szkolenie.txt znalazł się na serwerze produkcyjnym?
2. Wymień 3 Twoim zdaniem najważniejsze korzyści wynikające z używania GIT
3. Co to jest GitFlow?
Systemy kontroli wersji - GIT
Dziękuję za uwagę!
Kontakt ze mną:
E-mail: tomasz.banasiak@rst.com.pl
WEB: http://banasiak.pro
RST DevSchool: Systemy Kontroli Wersji na przykładzie GIT
By Tomasz Banasiak
RST DevSchool: Systemy Kontroli Wersji na przykładzie GIT
- 1,029