System kontroli wersji

oraz związany z nim workflow

System kontroli wersji

Version Control System (VCS)

Repozytorium

Paweł

lokalny

WADY

Jakub

Prawie zerowa możliwość współpracy w drużynie

Paweł

Paweł

Jakub

scentralizowany

Repozytorium

zdalne (remote)

WADY

Bardzo niska odporność na awarie zdalnego serwera

Brak dostępu do historii zmian offline

Paweł

Jakub

Rozproszony

zdalne (remote)

Repozytorium

Repozytorium

Repozytorium

Workflow

Development

kodzenie...

Pull request

Code review

Merge

GIT

Instalacja (Ubuntu)

$ sudo apt-get install git

Wstępna konfiguracja

$ git config --global user.name "Imię Nazwisko"
$ git config --global user.email email

# opcjonalnie
$ git config --global core.editor subl

# wypisanie ustawień
$ git config --list

Utworzenie repozytorium

$ cd
$ mkdir git_pypila
$ cd git_pypila
$ git init

Dodanie pliku do 

$ touch git.py
$ echo "print 'Test'" > git.py
$ git add git.py

commita

Wyświetlenie aktualnego stanu plików

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   git.py

zmian (plików)

$ git commit -m "My first git commit!"
[master (root-commit) a798687] My first git commit!
 1 file changed, 1 insertion(+)
 create mode 100644 git.py

Commit

Historia zmian

$ git log
commit a7986878d0d059b242e1de3e2c9bfde6b7c70e33
Author: Artur Grochowski <artur.grochowski@stxnext.com>
Date:   Mon Feb 16 00:14:48 2015 +0100

    My first git commit!

Dodawanie zdalnego repozytorium

$ git remote add origin link_do_zdalnego_repozytorium

Pushowanie

# git push <remote> <branch>
$ git push origin master

zmian

Clonowanie

# usuwamy folder
$ cd
$ rm -rf git_pypila
# git clone <link>
$ git clone link_do_zdalnego_repo

repozytorium

branchy

# git branch <nazwa_brancha>
$ git branch hello-world
$ git branch witaj-swiecie

Tworzenie

master

hello-world

witaj-swiecie

brancha

# git checkout <nazwa_brancha>
$ git checkout hello-world

Zmiana aktualnego

(git status aby zobaczyć na jakim branchu jesteśmy)

$ echo "print 'Hello world'" > git.py
$ git add git.py

Edytujemy plik git.py

Następnie commitujemy i pushujemy tego brancha tak samo jak poprzednio, tj.

$ git commit -m "Some changes!"
$ git push origin hello-world

Tworzymy

pull requesta

na gitlabie

Files > create merge request

Tworzymy podobnego pull requesta dla brancha witaj-swiecie, pamiętając aby zmienić, scommitować i spushować zmiany w pliku git.py (tak aby wypisywany był tekst "Witaj świecie")

Mergujemy jeden z pull requestów na gitlabie i patrzymy co się stanie z drugim :).

Powinny pojawić się konflikty. W celu ich rozwiązania musimy przełączyć się na branch gdzie się one znajdują i go zaaktualizować

Pobieranie (fetchowanie)

# git fetch <remote> <branch>
$ git fetch origin master

zmian

Mergowanie

# git merge <branch>
$ git merge origin/master

zmian

$ git pull origin master

Protip

dwa poprzednie kroki (fetch oraz merge) można wykonać jedną komendą:

Rozwiązujemy konflikty

Przełączamy się na brancha na którym mamy konflikt

aktualizujemy nasz branch o zmiany z mastera

decydujemy którą część kodu zostawić a którą usunąć manualnie

Ponownie commitujemy i wypychamy nasze zmiany

Dziękuję za uwagę

VCS - 2016

By Artur Grochowski