Programowanie w jezykach skryptowych - Python i Linux...

138
Programowanie w j˛ ezykach skryptowych - Python i Linux Bash Maciej Wielgosz Wydzial Informatyki, Elektroniki i Telekomunikacji 2015, semestr zimowy M. Wielgosz (AGH - IET) Programowanie w j˛ ezykach skryptowych - Python i Linux Bash 2015 1 / 138

Transcript of Programowanie w jezykach skryptowych - Python i Linux...

Page 1: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Programowanie w jezykachskryptowych - Python i Linux Bash

Maciej Wielgosz

Wydział Informatyki, Elektroniki i Telekomunikacji

2015, semestr zimowy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 1 / 138

Page 2: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Czesc II

Git

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 2 / 138

Page 3: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git

1 Systemy kontroli wersji2 Systemy scentralizowane a

rozproszone3 Git jako system lokalny

InicjalizacjaStany plikówZapis stanuHistoriaPraca z branchami

4 Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacjaModel pracy oparty o wielerepozytoriów

5 Inne mozliwosciIgnorowanie plikówKonfiguracjaWiecej o komendach iopcjachDodatkowa dokumentacja

6 Organizacja pracy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 3 / 138

Page 4: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

VCS

System kontroli wersji (ang. Version Control System)Program słuzacy do sledzenia zmian w kodzie/dokumencie zródłowymoraz ułatwiajacy łaczenie modyfikacji pochodzacych z wielu zródeł.

Obecnie VCS stały sie standardem przy pracy nad róznego typuprojektami informatycznymi, ale za VCS mozna uznac takze np.sledzenie zmian w systemach typu Wiki czy pakietach biurowych.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 4 / 138

Page 5: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Dlaczego warto uzywac VCS?

Do najwazniejszych zalet VCS mozna zaliczyc:

z proste przegladanie i przywracanie poprzednich wersji plików,z łatwosc synchronizacji zródeł pomiedzy róznymi maszynami i

członkami zespołu,z mozliwosc rozwijania projektu w wielu kierunkach jednoczesnie

(np. naprawianie błedów z ostatniej wersji przy równoczesnejpracy nad nowa funkcjonalnoscia),

z opcje integracji z automatycznymi narzedziami do np. testowaniaczy deploymentu.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 5 / 138

Page 6: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Popularne systemy

W chwili obecnej najczesciej mozna spotkac sie z nastepujacymisystemami:

z Apache Subversion (SVN) – stworzony w roku 2000 jako (wwiekszosci kompatybilny) nastepca Concurrent Version System(CVS),

z Mercurial (Hg) – pojawił sie w roku 2005; jego zamierzonympierwotnym zastosowaniem była praca nad rozwojem jadraLinuksa, jednak w tym celu ostatecznie wybrano Git,

z Git – stworzony kilka dni przed Mercurialem i w tym samym celu;obecnie prawdopodobnie najpopularniejszy system kontroli wersji.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 6 / 138

Page 7: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git

1 Systemy kontroli wersji2 Systemy scentralizowane a

rozproszone3 Git jako system lokalny

InicjalizacjaStany plikówZapis stanuHistoriaPraca z branchami

4 Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacjaModel pracy oparty o wielerepozytoriów

5 Inne mozliwosciIgnorowanie plikówKonfiguracjaWiecej o komendach iopcjachDodatkowa dokumentacja

6 Organizacja pracy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 7 / 138

Page 8: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Systemy lokalne

z Proste bazy danych, która przechowuja wszystkie zmiany wplikach jako kolejne wersje,

z jednym z pierwszych systemów tego typu był RCS (RevisionControl System),

z systemy te działaja na zasadzie przechowywania róznic pomiedzyplikami tzw. patchy,

z mozna odtworzyc jak plik wygladał w dowolnym momencie czasupoprzez zsumowanie wszystkich patchy.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 8 / 138

Page 9: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Systemy scentralizowane

z Systemy scentralizowane powstały z potrzeby współdzieleniakodu pomiedzy róznymi developerami i maszynami,

z oparte sa na idei głównego serwera przechowujacego całahistorie i dowolnej ilosci klientów, którzy kopiuja z centralnegoserwera pliki,

z jednym z najpopularniejszych przykładów takich systemów jestApache Subversion (SVN),

z przez wiele lat systemy scentralizowane były standardem wobszarze kontroli wersji.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 9 / 138

Page 10: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zalety i wady systemów scentralizowanych

Zalety (w stosunku do systemów lokalnych):

z kazdy do pewnego stopnia orientuje sie, co robia inni członkowiezespołu,

z szczegółowa kontrola uprawnien uzytkowników,z łatwiejsze zarzadzanie (łatwiej zarzadzac jednym repozytorium niz

wieloma lokalnymi).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 10 / 138

Page 11: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zalety i wady systemów scentralizowanych

Wady:

z niedostepnosc centralnego repozytorium powoduje paraliz pracycałego zespołu, ze wzgledu na brak komunikacji z baza danych,

z awaria centralnego serwera powoduje utrate całej historii pracy(chyba ze były tworzone kopie zapasowe).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 11 / 138

Page 12: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Systemy rozproszone

Zasada działaniaSystemy rozproszone przechowuja lokalnie cała historie zmian, copozwala uzytkownikowi na prace niezaleznie od dostepnosci innychwezłów.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 12 / 138

Page 13: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zalety systemów rozproszonych

Zalety:

z kazda kopia repozytorium słuzy jednoczesnie jako kompletnerepozytorium,

z istnieje mozliwosc uzywania kilku zdalnych („centralnych”)serwerów,

z taka architektura umozliwia stosowanie wielu modeli organizacjipracy,

z obecnie najpopularniejszym przykładem systemu rozproszonegojest git.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 13 / 138

Page 14: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Podsumowanie

Systemy scentralizowane sa tworzone z załozeniem, ze istnieje jednowłasciwe (absolutne) zródło.

Systemy rozproszone:

z zostały stworzone z załozeniem, ze kazde repozytorium jest taksamo dobre jak inne,

z dzielenie i scalanie repozytoriów jest po prostu forma komunikacji,z decyzja o znaczeniu danego repozytorium jest podejmowania

indywidualnie i nie jest kontrolowana przez oprogramowanie.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 14 / 138

Page 15: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git

1 Systemy kontroli wersji2 Systemy scentralizowane a

rozproszone3 Git jako system lokalny

InicjalizacjaStany plikówZapis stanuHistoriaPraca z branchami

4 Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacjaModel pracy oparty o wielerepozytoriów

5 Inne mozliwosciIgnorowanie plikówKonfiguracjaWiecej o komendach iopcjachDodatkowa dokumentacja

6 Organizacja pracy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 15 / 138

Page 16: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system lokalny

Główna zaleta systemów rozproszonych jest ich autonomicznosc:

z aby z nich korzystac, nie jest potrzebny zaden serwer,z w podstawowej wersji wszystko moze odbywac sie tak, jak przy

stosowaniu najprostszego lokalnego systemu.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 16 / 138

Page 17: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git CLI

Program git działa na zasadzie komend (podprogramów), z którychniemal kazda ma odrebny zestaw argumentów.

Liste wspólnych opcji oraz najczesciej uzywanych komend moznazobaczyc wpisujac:

$ git --help

Szczegółowe opcje poszczególnych komend mozna zobaczycuzywajac:

$ git <command> --help

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 17 / 138

Page 18: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system lokalny

InicjalizacjaStany plików

Zapis stanuHistoriaPraca z branchami

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 18 / 138

Page 19: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Nowe repozytorium

Załozenie nowego, lokalnego repozytorium w wybranym katalogu(moga wczesniej istniec w nim jakies pliki; w przykładach uzywanybedzie katalog acai):

$ cd acai$ git initInitialized empty Git repository in

↪→ /[...]/acai/.git/

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 19 / 138

Page 20: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Dodanie istniejacych plików

Stworzone w ten sposób repozytorium nie sledzi jeszcze zadnychzmian w plikach. Aby rozpoczac kontrolowanie wersji dla juzistniejacych w katalogu plików nalezy wydac dwa polecenia. Pierwszez nich to:

$ git add .

Powoduje ono dodanie do kontroli wersji wszystkich plików zbiezacego (.) katalogu. Co dokładnie zostało dodane moznasprawdzic wydajac polecenie git status.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 20 / 138

Page 21: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Dodanie istniejacych plików

$ git statusOn branch master

Initial commit

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

new file: .gitignorenew file: LICENSE.txtnew file: README.md...

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 21 / 138

Page 22: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pierwszy commit

Druga komenda instruuje gita, aby „zapamietał ten punkt w historii”. Wwersji podstawowej wyglada ono tak:

$ git commit

Po wykonaniu polecenia otwierany jest domyslnie skonfigurowanyedytor tekstowy w którym nalezy podac opis własnie tworzonego„punktu”.

Standardowo opis ten musi zostac dodany – w przeciwnym razietworzenie punktu zostanie anulowane.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 22 / 138

Page 23: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pierwszy commit

Czesto opis (wiadomosc, ang. message) podaje sie bezposrednio zlinii polecen:

$ git commit -m "Project skeleton"[master (root-commit) 6048090] Project skeleton19 files changed, 718 insertions(+)create mode 100644 .gitignorecreate mode 100644 LICENSE.txtcreate mode 100644 README.md...

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 23 / 138

Page 24: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pełna inicjalizacja

Podsumowujac, rozpoczecie lokalnej pracy z gitem najczesciejprzebiega nastepujaco:

$ cd <project_dir>$ git init...$ git add .$ git commit -m "Initial commit"...

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 24 / 138

Page 25: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system lokalny

InicjalizacjaStany plików

Zapis stanuHistoriaPraca z branchami

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 25 / 138

Page 26: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Mozliwe stany plików

Pliki w gicie moga znajdowac sie w jednym z 2 stanów:

z niesledzone (ang. untracked) – pliki, których stanu git nieprzechowuje

z sledzone (ang. tracked) – takie, o których git „wie”

Aby plik był sledzony, nalezy go dodac do gita, np. uzywajac poleceniagit add.

Usuniecie pliku z listy sledzonych (i z dysku!) po stworzeniu commitaodbywa sie za pomoca git rm.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 26 / 138

Page 27: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Sledzenie zmian

Sledzone pliki moga byc:

z niezmodyfikowane (ang. unmodified) – takie, które nie zmieniłysie od czasu ostatniego zapisu stanu

z zmodyfikowane (ang. modified) – takie, w których sawprowadzone jakies zmiany

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 27 / 138

Page 28: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Sledzenie zmian

Kazdy zmodyfikowany plik zawiera jedna lub wiecej zmian. Wartopamietac, ze git ma mozliwosc zapisu stanu kazdej zmiany z osobna.

Kazda zmiana moze byc zatwierdzona (w nomenklaturze gita staged)lub nie. Zwykle jednak nie rozpatruje sie kazdej zmiany pojedynczo,tylko zatwierdza wszystkie w danym pliku.

To, na jakim etapie „cyklu zycia” jest dana zmiana mozna podejrzecuzywajac komendy git status.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 28 / 138

Page 29: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Status pliku

$ git statusOn branch masterChanges not staged for commit:

(use "git add <file>..." to update what will be↪→ committed)

(use "git checkout -- <file>..." to discard↪→ changes in working directory)

modified: LICENSE.txtmodified: README.md

no changes added to commit (use "git add" and/or↪→ "git commit -a")

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 29 / 138

Page 30: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zatwierdzenie zmian

Zatwierdzenie (wszystkich) zmian w danych plikach odbywa sie przyuzyciu polecenia git add:

$ git add LICENSE.txt README.md$ git statusOn branch masterChanges to be committed:

(use "git reset HEAD <file>..." to unstage)

modified: LICENSE.txtmodified: README.md

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 30 / 138

Page 31: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zatwierdzenie zmian

Do zatwierdzenie wszystkich zmian we wszystkich zmodyfikowanychplikach, a takze dodania do kontroli wersji nowych (i usuniecia z niejjuz nieistniejacych), przydatna jest opcja -A:

$ git add -A

Oznacza ona w skrócie „zatwierdz wszystko”.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 31 / 138

Page 32: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Wycofanie zmian

Jesli któras z zatwierdzonych zmian jednak nie powinna zostaczapisana, mozna uzyc git reset, aby ja wycofac:

$ git reset README.mdUnstaged changes after reset:M README.md

Polecenie to (w tej formie) nie powoduje zadnych zmian w pliku –informuje tylko gita, ze dana zmiana (zmiany) maja jeszcze nie byczapisywane.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 32 / 138

Page 33: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Podejrzenie zmian

Do podgladania, co zostało zmienione od ostatniego zapisu stanu(ogólnie lub w danym pliku) słuzy polecenie git diff:

$ git diff README.md

Otworzy ono edytor, w którym zaznaczone beda miejsca wystapieniazmian.

W najprostszym przypadku lista róznic bedzie miała postac plikutekstowego, zawierajacego informacje o tym, które linie i w jakichplikach zostały zmienione.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 33 / 138

Page 34: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

git diff

1 diff --git a/README.md b/README.md2 index e69de29..1edb8e1 1006443 --- a/README.md4 +++ b/README.md5 @@ -0,0 +1,3 @@6 +ACAI - ACcelerated AI7 +8 +Suite of Artificial Intelligence algorithms

↪→ implemented with future hardware↪→ acceleration (via OpenCL) in mind.

git diff README.md

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 34 / 138

Page 35: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Podwójny status pliku

Czasami moze zdarzyc sie, ze plik znajduje sie zarówno na lisciezmian zatwierdzonych do zapisu (staged), jak i na liscie zmian jeszczenie zatwierdzonych (unstaged).

Wynika to ze wspomnianego wczesniej sledzenia pojedynczych zmian– jesli zatwierdzony był cały plik, to tak naprawde zatwierdzone byływszystkie zmiany znajdujace sie w nim w danym momencie.

Jesli uległ on dalszej modyfikacji (nawet nadpisujacej zatwierdzonezmiany), to nowe modyfikacje równiez trzeba zatwierdzic, by mogłybyc zapisane.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 35 / 138

Page 36: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system lokalny

InicjalizacjaStany plików

Zapis stanuHistoriaPraca z branchami

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 36 / 138

Page 37: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Komenda commit

Zatwierdzone zmiany zapamietuje sie uzywajac poleceniagit commit. Tworzy ono opisany punkt na osi czasu, do któregomozna powracac.

Kazdy commit identyfikowany jest przez unikalny hash, automatyczniegenerowany na podstawie danych takich jak biezacy czas, autorcommita czy wprowadzony opis.

Hash ten pozwala stwierdzic, czy dwa commity posiadajace ten samopis faktycznie sa takie same.

Wiele polecen gita przyjmuje hash jako jeden ze swoich argumentów.Cały identyfikator jest jednak kłopotliwy w uzyciu (SHA1 generuje ciagio długosci 40 znaków), wiec czesto stosuje sie tylko 7 pierwszych jegoznaków.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 37 / 138

Page 38: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Always commit, you must

Stworzony commit zabezpiecza przed utrata wyników pracy.

Czesto okazuje sie, ze poprzednie rozwiazanie było tym własciwym...

Jezeli zapisany został tylko stan po wszystkich poprawkach, nie ma jakpodejrzec i/lub wykorzystac w tym celu pierwotnego rozwiazania –trzeba napisac je od nowa.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 38 / 138

Page 39: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Always commit, you must

Jezeli natomiast stan był zapisywany po kazdym etapie pracy, to złatwoscia mozna przywrócic plik do poprzedniego stanu – czy to wcelu zastapienia obecnej wersji, czy tylko „podejrzenia” i ekstrakcjipotrzebnych fragmentów.

Miedzy innymi z tego powodu warto jest wyrobic sobie nawyktworzenia czestych i dobrze opisanych commitów. Przyda sie to takzew pózniejszej, zespołowej pracy z gitem – a czasami moze okazac siejedyna deska ratunku w przypadku wystapienia jakichs problemów.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 39 / 138

Page 40: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Podstawowe uzycie

$ git commit

Uruchomienie powyzszej komendy otworzy domyslny edytor (vim), wktórym nalezy wprowadzic opis. Standardowo plik ten zawierakomentarz, dostarczajacy dodatkowych informacji o tworzonymwłasnie commicie.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 40 / 138

Page 41: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Podstawowe uzycie

1

2 # Please enter the commit message for your↪→ changes. Lines starting

3 # with ’#’ will be ignored, and an empty message↪→ aborts the commit.

4 # On branch master5 # Changes to be committed:6 # modified: LICENSE.txt7 #8 # Changes not staged for commit:9 # modified: README.md

10 #

Domyslna zawartosc pliku z opisem

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 41 / 138

Page 42: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Podstawowe uzycie

Domyslnie, jesli nie wpiszemy tresci opisu, commit zostanieanulowany:

Aborting commit due to empty commit message.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 42 / 138

Page 43: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Opis z linii polecen

Czesto uzywa sie parametru -m, aby wprowadzic opis bezposrednio zlinii polecen:

$ git commit -m "Change license to MIT"[master 3278ed2] Change license to MIT1 file changed, 21 insertions(+), 1 deletion(-)rewrite LICENSE.txt (100%)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 43 / 138

Page 44: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zatwierdzenie wszystkich zmian przy zapisie

Aby nie dodawac recznie zmian w kazdym sledzonym juz pliku, moznauzyc opcji -a:

$ git commit -a -m "Add basic repo description"[master fc13f88] Add basic repo description1 file changed, 3 insertions(+)

Opcja ta dotyczy tylko juz sledzonych plików. Jezeli w repo zostałystworzone nowe, nalezy dodac je „normalnie”, uzywajac np.git add -A.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 44 / 138

Page 45: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Edycja commita

Zdarza sie, ze przy tworzeniu commita nastapiła pomyłka, np.literówka w opisie czy pominiety plik. Z pomoca przychodzi wtedyopcja --amend, pozwalajaca na łatwa edycje ostatniego commita:

$ git commit --amend -m "Add basic project↪→ description"

[master bb3823f] Add basic project descriptionDate: Wed Oct 14 13:45:38 2015 +02001 file changed, 3 insertions(+)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 45 / 138

Page 46: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Edycja commita

To, co tak naprawde git robi, to usuwa ostatni commit i w jego miejscetworzy nowy, zawierajacy wszystkie zmiany z tego usunietego oraznowo zatwierdzone. Mozna to zaobserwowac porównujac ichidentyfikatory.

W wyniku edycji powstaje nowy commit. Nie ma to wielkiegoznaczenia w przypadku lokalnego uzycia gita, jest jednak wazne przybardziej zaawansowanych zastosowaniach.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 46 / 138

Page 47: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system lokalny

InicjalizacjaStany plików

Zapis stanuHistoriaPraca z branchami

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 47 / 138

Page 48: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Ostatni commit

Opis i zmiany zapisane w ostatnim commicie mozna zobaczyckorzystajac z polecenia git show. Analogicznie jak git diff otworzyono edytor z plikiem zawierajacym liste zmian i dodatkowoinformacjami o commicie:

1 commit bb3823f63f1254108238951a60b319fcc3a1b1a72 Author: Maciej Wielgosz <[email protected]>3 Date: Wed Oct 14 13:45:38 2015 +02004

5 Add basic project description6

7 diff --git a/README.md b/README.md

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 48 / 138

Page 49: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Ostatni commit

8 index e69de29..8dd37ac 1006449 --- a/README.md

10 +++ b/README.md11 @@ -0,0 +1,3 @@12 +ACAI - ACcellerated AI13 +14 +Suite of Artificial Intelligence algorithms

↪→ implemented with future hardware↪→ acceleration (via OpenCL) in mind.

git show

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 49 / 138

Page 50: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Przeglad historii

Skrócona historie commitów mozna przegladac przy uzyciu poleceniagit log. Bedzie ona otworzona w domyslnym edytorze.

1 commit bb3823f63f1254108238951a60b319fcc3a1b1a72 Author: Maciej Wielgosz <[email protected]>3 Date: Wed Oct 14 13:45:38 2015 +02004

5 Add basic project description6

7 commit 3278ed255627fa64ede6ab587e0d2c8c2711d2038 Author: Maciej Wielgosz <[email protected]>9 Date: Wed Oct 14 13:23:57 2015 +0200

10

11 Change license to MIT

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 50 / 138

Page 51: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Przeglad historii

13 commit 6048090a0ce0997025957d5fd88224d9582aaa0a14 Author: Maciej Wielgosz <[email protected]>15 Date: Mon Oct 12 22:28:43 2015 +020016

17 Project skeleton

git log

Pełna informacje o zmianach mozna wyswietlic podajac argument wpostaci hasha do polecenia git show, np. git show 3278ed2.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 51 / 138

Page 52: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Historyczne wersje pliku

Aby zobaczyc, jak wygladał dany plik w konkretnym punkcie historii lubprzywrócic go do tego stanu, mozna uzyc komendy git checkout

podajac hash interesujacego commita i sciezke do pliku.

$ git checkout 6048090 LICENSE.txt

Przywrócenie go do biezacej wersji (z najnowszego commita) odbywasie analogicznie (HEAD odpowiada ostatniemu commitowi):

$ git checkout HEAD LICENSE.txt

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 52 / 138

Page 53: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Historyczne wersje pliku

Dostepne sa równiez pewne skróty, np.

$ git checkout HEAD~2 LICENSE.txt

cofa plik LICENSE.txt o 2 wersje.

Nalezy zauwazyc, ze wynikiem polecenia git checkout nie jest tylkopodglad – dokonywane sa faktyczne zmiany w pliku, które w raziepotrzeby mozna zatwierdzic i zapisac.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 53 / 138

Page 54: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Podglad historycznej wersji pliku

Jezeli pozadany jest tylko podglad, bez wprowadzania zmian do pliku,mozna skorzystac z wariantu polecenia git show:

$ git show HEAD~2:./LICENSE.txt

Jako separatora pomiedzy identyfikatorem wersji, a sciezka do plikuuzywa sie : (bez spacji!).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 54 / 138

Page 55: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Znaczace opisy

Dobre opisy commitów znaczaco ułatwiaja prace z historia zmian.

Moga pomóc znacznie zawezic przeszukiwany przedział czasu wprzypadku np. pojawienia sie nowych błedów czy ułatwic znalezieniekonkretnej wersji pliku.

Czytelne opisy sa istotne zwłaszcza w przypadku pracy w grupie orazkorzystania z narzedzi automatycznie generujacych liste zmian(changelog) w projekcie.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 55 / 138

Page 56: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system lokalny

InicjalizacjaStany plikówZapis stanuHistoria

Praca z branchamiTworzenieŁaczenieKonfliktyUsuwanieRebase

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 56 / 138

Page 57: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Branch

BranchOdgałezienie projektu, zwykle wydzielone w celu realizacji konkretnejfunkcjonalnosci.

Wszystkie repozytoria git maja domyslny, główny branch o nazwie’master’. Zwykle stanowi on baze, na podstawie której tworzy sie innebranche.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 57 / 138

Page 58: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Istniejace branche

Sprawdzenie, jakie branche istnieja w projekcie odbywa sie za pomocapolecenia git branch.

$ git branch

* master

W momencie stworzenia nowego repozytorium branch ’master’ nie jestwidoczny na liscie branchy – pojawia sie on tam dopiero po pierwszymcommicie.

Aktywny branch (czyli ten, do którego „przynaleza” wersje plikówznajdujace sie obecnie na dysku) oznaczony jest *. W danej chwiliaktywny moze byc tylko jeden branch.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 58 / 138

Page 59: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Tworzenie

Jednym ze sposobów stworzenia nowego brancha jest:

git branch <branch_name>

Polecenie to tworzy nowy branch, ale go nie aktywuje. Aby zaczacprace nalezy sie na niego przełaczyc:

git checkout <branch_name>

Jest to standardowy sposób przełaczania sie miedzy branchami.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 59 / 138

Page 60: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Tworzenie

Wygodniejszym sposobem jest stworzenie nowego brancharównoczesnie z jego aktywacja, przy uzyciu opcji -b:

$ git checkout -b documentationSwitched to a new branch ’documentation’

Nowo stworzony branch domyslnie poczatkowo znajduje sie w tymsamym punkcie, co obecnie aktywny. Mozna takze podac, którybranch ma stanowic „baze” nowo tworzonego:

$ git checkout -b docs masterSwitched to a new branch ’docs’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 60 / 138

Page 61: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Merge

Po zakonczeniu pracy nad dana funkcjonalnoscia i jej przetestowaniuprzychodzi czas na właczenie jej do głównego brancha. Jednym zesposobów, by to zrobic, jest uzycie polecenia git merge. Abypołaczyc branche za jego pomoca, nalezy najpierw przełaczyc sie nadocelowy branch (zwykle ’master’).

$ git checkout masterSwitched to branch ’master’$ git merge docsUpdating 0903642..48e8690Fast-forwardREADME.md | 5 +++++1 file changed, 5 insertions(+)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 61 / 138

Page 62: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Merge

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 62 / 138

Page 63: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Konflikty

Nie zawsze merge przebiega bez problemów. Jesli dany plik zostałzmieniony zarówno w branchu, który chcemy dołaczyc, jak i w branchudocelowym, moga pojawic sie konflikty, z którymi git nie poradzi sobieautomatycznie.

$ git checkout documentationSwitched to branch ’documentation’$ git merge docsAuto-merging README.mdCONFLICT (content): Merge conflict in README.mdAutomatic merge failed; fix conflicts and then

↪→ commit the result.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 63 / 138

Page 64: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Konflikty

W takim wypadku dostepne sa dwie opcje postepowania:

1 anulowanie operacji:

$ git merge --abort

2 manualne rozwiazanie konfliktów i stworzenie commita łaczacegokonfliktowe zmiany w pozadany sposób. Wykorzystywane w tymcelu sa polecenia git add i git commit.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 64 / 138

Page 65: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rozwiazywanie konfliktów

Git dodaje do pliku charakterystyczne znaczniki w miejscach, wktórych nastapił konflikt:

1 ACAI - ACcellerated AI2 ======================3

4 <<<<<<< HEAD5 Lorem ipsum dolor sit amet, consectetur [...]6 =======7 Suite of Artificial Intelligence algorithms [...]

12 >>>>>>> docs

Plik README.md z konfliktami

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 65 / 138

Page 66: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rozwiazywanie konfliktów

Przy wystapieniu konfliktu jako pierwsze wyswietlane sa zmiany, którebyły zapisane na aktywnym branchu. Nastepnie (po =======)wyswietlane sa zmiany, które pochodza z dołaczanego brancha.

Rozwiazywanie konfliktów polega na wyszukania wszystkichwystapien takich alternatyw i zastapieniu ich (łacznie z markeramiograniczajacymi) pozadana zawartoscia.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 66 / 138

Page 67: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rozwiazywanie konfliktów

1 ACAI - ACcellerated AI2 ======================3

4 Suite of Artificial Intelligence algorithms [...]5

6 Lorem ipsum dolor sit amet, consectetur [...]7

8 ## Idea9

10 [...]

README.md z rozwiazanymi konfliktami

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 67 / 138

Page 68: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rozwiazywanie konfliktów

Rozwiazanie konfliktu oznaczamy uzywajac git add.

$ git add README.md

Jesli wszystkie konflikty zostały rozwiazane, to mozna zakonczycmerge:

$ git commit[documentation 33693fc] Merge branch ’docs’ into

↪→ documentation

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 68 / 138

Page 69: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rozwiazywanie konfliktów

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 69 / 138

Page 70: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Usuwanie

Jesli chcemy usunac jakis branch, nie moze on byc aktywny.

Aby usunac branch, który został dołaczony do biezacego („bezpieczneusuniecie”), uzywa sie opcji -d:

$ git checkout masterSwitched to branch ’master’$ git branch -d docsDeleted branch docs (was 48e8690).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 70 / 138

Page 71: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Usuwanie

Aby usunac branch, który juz nie jest potrzebny, a nie jest dołaczonydo biezacego (np. w miedzyczasie powstała zupełnie inna koncepcjarozwiazania danego problemu), nalezy skorzystac z opcji -D (-dzwróci bład):

$ git branch -d documentationerror: The branch ’documentation’ is not fully

↪→ merged.If you are sure you want to delete it, run ’git

↪→ branch -D documentation’.$ git branch -D documentationDeleted branch documentation (was 33693fc).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 71 / 138

Page 72: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

Alternatywnym podejsciem do scalania zmian jest stosowaniekomendy git rebase.

Jej działanie polega na edycji kolejnosci commitów (a co za tym idzie,na edycji zawartosci samych commitów) tak, by commity z branchapodlegajacego operacji rebase wydawały sie stworzonechronologicznie po wszystkich commitach brancha bazowego.

Pozwala to na pózniejsze bezkonfliktowe zastosowanie poleceniagit merge.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 72 / 138

Page 73: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

Załózmy, ze przed merge brancha ’docs’ został na bazie brancha’master’ stworzony branch ’setup’. Porównanie historii commitów wbranchach ’master’ i ’setup’ pozwala stwierdzic, ze róznia sie onejednym commitem.

$ git checkout setupSwitched to branch ’setup’$ git log

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 73 / 138

Page 74: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

1 commit 8e4bd6bf762a577795c42a33fb5ca27f9d2d43d72 Author: Maciej Wielgosz <[email protected]>3 Date: Wed Oct 14 22:28:05 2015 +02004

5 Correctly configure console entry point6

7 commit 0903642a4b1118f7a75e10dad7f8271d2d28e4ed8 Author: Maciej Wielgosz <[email protected]>9 [...]

git log dla brancha ’setup’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 74 / 138

Page 75: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

1 commit 48e8690b2f7019dfc811bcc6f88e6d197198f7962 Author: Maciej Wielgosz <[email protected]>3 Date: Wed Oct 14 19:42:20 2015 +02004

5 Added some formatting & idea description6

7 commit 0903642a4b1118f7a75e10dad7f8271d2d28e4ed8 Author: Maciej Wielgosz <[email protected]>9 [...]

git log dla brancha ’master’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 75 / 138

Page 76: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

Chcielibysmy, by docelowa kolejnosc commitów w branchu masterzawierała najpierw commit 48e8690, a nastepnie 8e4bd6b – bezzadnych dodatkowych commitów wynikajacych z merge (tzw. mergefast-forward).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 76 / 138

Page 77: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 77 / 138

Page 78: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

Oznacza to, ze przed właczeniem brancha ’setup’ do ’master’ musimyzawrzec wszystkie commity z ’master’ (bedacego baza) w ’setup’.Innymi słowy: ustalic nowa baze dla ’setup’ (branch ’setup’ musi bycaktywny):

$ git rebase masterFirst, rewinding head to replay your work on top

↪→ of it...Applying: Correctly configure console entry point

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 78 / 138

Page 79: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 79 / 138

Page 80: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

Po rebase historia brancha ’setup’ wyglada nastepujaco:

1 commit 3fe7e9e09628669e39f17c8cef6e4031326b42232 Author: Maciej Wielgosz <[email protected]>3 Date: Wed Oct 14 22:28:05 2015 +02004

5 Correctly configure console entry point6

7 commit 48e8690b2f7019dfc811bcc6f88e6d197198f7968 Author: Maciej Wielgosz <[email protected]>

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 80 / 138

Page 81: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

9 Date: Wed Oct 14 19:42:20 2015 +020010

11 Added some formatting & idea description12

13 commit 0903642a4b1118f7a75e10dad7f8271d2d28e4ed14 Author: Maciej Wielgosz <[email protected]>15 [...]

git log dla brancha ’setup’ po rebase

Warto zwrócic uwage na identyfikatory commitów – nawet wprzypadku braku konfliktów (które rozwiazuje sie analogicznie jak przyuzyciu merge) git tak naprawde zastepuje wszystkie unikatowecommity stworzone w branchu podlegajacemu rebase nowymi.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 81 / 138

Page 82: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Rebase

Ostatnim krokiem jest właczenie brancha ’setup’ do ’master’:

$ git checkout masterSwitched to branch ’master’$ git merge setupUpdating 48e8690..3fe7e9eFast-forwardacai/main.py | 2 +-setup.cfg | 11 ++++-------2 files changed, 5 insertions(+), 8 deletions(-)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 82 / 138

Page 83: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Uzywanie rebase

Zalety:

z bardziej przejrzysta historia (unika sie potencjalnie sporej ilosci„merge commitów”),

z poniewaz rebase de facto tworzy nowe commity, moze on zostacwykorzystany do uporzadkowania historii brancha podlegajacegotej operacji (np. edycja starych opisów, łaczenie i rozdzielaniecommitów). Aby skorzystac z tej mozliwosci uzywa sie trybuinteraktywnego (git rebase -i <base_branch>).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 83 / 138

Page 84: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Uzywanie rebase

Wady i niebezpieczenstwa:

z w przeciwienstwie do merge, rebase jest potencjalniedestrukcyjna operacja. Oznacza to, ze w razie pomyłki moznazaprzepascic wyniki pracy,

z nigdy nie powinno sie uzywac rebase na tzw. publicznychbranchach – czyli takich, których w jakims celu uzywa tez ktosinny (albo na podstawie którego powstały inne branche). Z punktuwidzenia gita commity przepisane po rebase i oryginalne commityto dwie zupełnie rózne rzeczy (nawet jesli prowadza do tegosamego rezultatu). W efekcie próba połaczenia oryginalnych i„nowych” zmian wygeneruje ogromna ilosc konfliktów.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 84 / 138

Page 85: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Uzywanie rebase

Przydatne uwagi:

z nigdy nie powinno sie przeprowadzac operacji rebase na branchu’master’,

z przed nieudanym rebase mozna sie w pewnym stopniuzabezpieczyc, tworzac tymczasowy branch:

$ git checkout feature-branch$ git checkout -b temporary-branch$ git rebase -i master$ git checkout master$ git merge temporary-branch

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 85 / 138

Page 86: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git

1 Systemy kontroli wersji2 Systemy scentralizowane a

rozproszone3 Git jako system lokalny

InicjalizacjaStany plikówZapis stanuHistoriaPraca z branchami

4 Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacjaModel pracy oparty o wielerepozytoriów

5 Inne mozliwosciIgnorowanie plikówKonfiguracjaWiecej o komendach iopcjachDodatkowa dokumentacja

6 Organizacja pracy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 86 / 138

Page 87: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacja

Model pracy oparty o wielerepozytoriów

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 87 / 138

Page 88: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zdalne repozytorium

W wiekszosci zastosowan jedno z repozytoriów dostepne dla całegozespołu słuzy jako repozytorium centralne, analogicznie jak wsystemach scentralizowanych.

Repozytorium takie zwykle tworzone jest zanim zacznie siejakakolwiek praca na kodem lub tuz po stworzeniu minimalnegoszkieletu projektu. Pozwala to na zminimalizowanie pózniejszegokonfigurowania lokalnych kopii.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 88 / 138

Page 89: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Remote

RemoteRepozytorium, najczesciej zdalne, które jest powiazane z danainstancja repo (nie musi byc to repozytorium centralne, moze to bycnp. kopia na maszynie innego developera).

Przyjeło sie, ze domyslny remote dla danego repozytorium nosi nazwe’origin’.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 89 / 138

Page 90: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Ustawienie remote w istniejacym repo

Aby dodac remote do istniejacego repo (przykładowo, gdy cała pracaodbywała sie lokalnie, a teraz została podjeta decyzja o upublicznieniuwyników) nalezy posłuzyc sie wariantem komendy git remote:

$ git remote add origin↪→ [email protected]:maciekwielgosz/acai.git

Aby zobaczyc dostepne remote’y wraz z ich URLami, mozna uzyc:

$ git remote -vorigin [email protected]:maciekwielgosz/acai.git

↪→ (fetch)origin [email protected]:maciekwielgosz/acai.git

↪→ (push)

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 90 / 138

Page 91: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Ustawienie remote w istniejacym repo

Samo dodanie remote jednak nie wystarczy. Dla wygody uzytkowaniapowinno sie takze ustawic dodany własnie remote jako domyslny przyzadaniu synchronizacji pomiedzy repozytoriami (tzw. upstream). Wprzeciwnym razie bedzie trzeba go podawac przy kazdym tego typuzadaniu.

Dalsze postepowanie zalezy od tego, czy zdalne repozytorium (’origin’)zawiera juz jakies dane, czy tez jest puste.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 91 / 138

Page 92: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Puste zdalne repozytorium

Jesli uzyte ma byc puste repozytorium, to pierwsza czynnoscia pododaniu remote do istniejacego projektu powinno byc powielenieistniejacej lokalnej struktury w zdalnym repozytorium. Równoczesniew trakcie tej operacji mozna ustawic nowy remote jako domyslny dosynchronizacji dla istniejacych branchy (opcja -u lub--set-upstream).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 92 / 138

Page 93: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Puste zdalne repozytorium

Wysłanie (push) na remote ’origin’ wszystkich (--all) istniejacychlokalnie branchy:

$ git push -u origin --allCounting objects: 50, done.Delta compression using up to 8 threads.Compressing objects: 100% (41/41), done.Writing objects: 100% (50/50), 12.84 KiB | 0

↪→ bytes/s, done.Total 50 (delta 13), reused 0 (delta 0)To [email protected]:maciekwielgosz/acai.git

* [new branch] master -> masterBranch master set up to track remote branch

↪→ master from origin.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 93 / 138

Page 94: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zdalne repozytorium z zawartoscia

Jesli w zdalnym repozytorium juz istnieje branch, który ma bycustawiony jako domyslny przy synchronizacji, mozna zastosowac tosamo polecenie (wysłanie lokalnych zmian z równoczesnymzapamietaniem remote):

$ git push -u origin masterBranch master set up to track remote branch

↪→ master from origin.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 94 / 138

Page 95: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Zdalne repozytorium z zawartoscia

Alternatywa jest skorzystanie z wariantu polecenia git branch (niedokonuje ono równoczesnie synchronizacji):

$ git branch -u origin/masterBranch master set up to track remote branch

↪→ master from origin.

Warto zwrócic uwage na róznice w składni powyzszych polecen.git branch przyjmuje jako argument tylko nazwe brancha(origin/master traktowane jest jako całosc). Pozwala ono naustawienie jako upstream zdalnego brancha o nazwie innej niz lokalna,podczas gdy przy uzyciu push nazwy musza sie zgadzac.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 95 / 138

Page 96: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Klonowanie

Jezeli chcemy dopiero zaczac prace z repo, które juz gdzies zdalnieistnieje, najprostszym sposobem jest uzycie git clone.

Pobierze ono automatycznie wszystkie istniejace branche, pozwalajacna natychmiastowe rozpoczecie pracy (beda one domyslnieskonfigurowane, by pobierac i wysyłac zmiany na ’origin’, czyli repo, zktórego sklonowano instancje).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 96 / 138

Page 97: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Klonowanie

$ git clone↪→ [email protected]:maciekwielgosz/acai.git↪→ acai-clone

Cloning into ’acai-clone’...remote: Counting objects: 50, done.remote: Compressing objects: 100% (41/41), done.remote: Total 50 (delta 13), reused 0 (delta 0)Receiving objects: 100% (50/50), 12.84 KiB | 0

↪→ bytes/s, done.Resolving deltas: 100% (13/13), done.Checking connectivity... done.

Dodatkowy argument ustawia nazwe lokalnego katalogu na acai-clone.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 97 / 138

Page 98: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacja

Model pracy oparty o wielerepozytoriów

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 98 / 138

Page 99: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Wysyłanie zmian

Zmiany wysyłane sa do zdalnego repo przy uzyciu znanego juzgit push.

To, jakie branche git bedzie próbował wysłac na serwer zalezy odkonfiguracji. Od wersji 2.0 git domyslnym zachowaniem (przy brakuinnych parametrów) jest wysyłanie zmian tylko z aktywnego brancha.Branch ten musi miec ustawiony upstream i ta sama nazwe lokalnie,jak i w zdalnym repo.

Wczesniejsze wersje wysyłały zmiany do wszystkich branchy, którychnazwy lokalne pokrywały sie ze zdalnymi. Mogło prowadzic to doopublikowania niechcianych zmian, wiec zachowanie to zostałozmienione.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 99 / 138

Page 100: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Wysyłanie zmian

$ cd ~/acai$ git statusOn branch masterYour branch is ahead of ’origin/master’ by 1

↪→ commit.(use "git push" to publish your local commits)

nothing to commit, working directory clean$ git --no-pager show --no-patchcommit 3c7730e1860259cd79daf925a568e36c8fca06c8Author: Maciej Wielgosz <[email protected]>Date: Thu Oct 15 20:13:30 2015 +0200

Add acai ASCII art

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 100 / 138

Page 101: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Wysyłanie zmian

$ git pushCounting objects: 5, done.Delta compression using up to 8 threads.Compressing objects: 100% (5/5), done.Writing objects: 100% (5/5), 1.17 KiB | 0

↪→ bytes/s, done.Total 5 (delta 2), reused 0 (delta 0)To [email protected]:maciekwielgosz/acai.git

3fe7e9e..3c7730e master -> master

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 101 / 138

Page 102: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pobieranie zmian

Zmiany ze zdalnego repozytorium pobiera sie poleceniem git fetch.Aby jednak zostały one zaaplikowane (faktycznie wprowadzone wplikach), nalezy nastepnie uzyc git merge.

$ cd ~/acai-clone$ git fetchremote: Counting objects: 5, done.remote: Compressing objects: 100% (5/5), done.remote: Total 5 (delta 2), reused 0 (delta 0)Unpacking objects: 100% (5/5), done.From bitbucket.org:maciekwielgosz/acai

3fe7e9e..3c7730e master -> origin/master

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 102 / 138

Page 103: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pobieranie zmian

$ git mergeUpdating 3fe7e9e..3c7730eFast-forwardacai/acai.txt | 31

↪→ +++++++++++++++++++++++++++++++acai/main.py | 13 ++++++++-----2 files changed, 39 insertions(+), 5 deletions(-)create mode 100644 acai/acai.txt

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 103 / 138

Page 104: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pobieranie zmian

Czesciej uzywany jest git pull, bedacy ich połaczeniem:

$ git pullremote: Counting objects: 3, done.remote: Compressing objects: 100% (2/2), done.remote: Total 3 (delta 1), reused 0 (delta 0)Unpacking objects: 100% (3/3), done.From bitbucket.org:maciekwielgosz/acai

3c7730e..6c207ea master -> origin/masterUpdating 3c7730e..6c207eaFast-forward.env | 1 +1 file changed, 1 insertion(+)create mode 100644 .env

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 104 / 138

Page 105: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Mozliwosci fetch/pull

z fetch pobiera zmiany dla wszystkich branchy istniejacych nadomyslnym remote,

z domyslny remote dla polecenia fetch moze róznic sie oddomyslnego remote’a dla polecenia push,

z pull moze zostac tak skonfigurowany, by opierac swoje działaniena rebase zamiast na merge. Nalezy wtedy wziac pod uwage tesame punkty, które dotycza rebase.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 105 / 138

Page 106: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacja

Model pracy oparty o wielerepozytoriów

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 106 / 138

Page 107: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Fork

ForkKopia repozytorium, zwykle stworzona w tym samym serwisie corepozytorium „centralne”. Moze posłuzyc do rozwijania odrebnej wersjiprojektu, jako sposób kontroli uprawnien uzytkowników czy tezdodatkowy poziom zabezpieczenia głównego repozytorium przedbłedami.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 107 / 138

Page 108: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Kontrola dostepu

Czesto, zwłaszcza w wiekszych projektach, kazdy z pracujacychdeveloperów ma uprawnienia do pobrania zmian z głównegorepozytorium (read access), ale tylko czesc z nich moze bezposredniodokonywac w nim zmian (write access).

Kazdy z członków zespołu pracuje na swoim forku (jest to jego ’origin’),co jakis czas synchronizujac go z głównym repozytorium (remote tenprzyjeto nazywac ’upstream’). Gdy zakonczy implementowac danafunkcjonalnosc, stworzone przez niego zmiany sa zatwierdzane iwłaczane do głównego repozytorium przez kogos posiadajacegoodpowiednie uprawnienia.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 108 / 138

Page 109: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pull request

Proces zgłaszania, akceptowania (badz odrzucania) i właczania zmiando głównego repozytorium zazwyczaj odbywa sie przy pomocy tzw.pull requestów.

Pull requesty pozwalaja na łatwe przegladanie zmian, ichkomentowanie, automatyczne testy kodu czy tez prosta synchronizacjez główna wersja kodu.

W mozliwosc łatwego tworzenia forków i pull requestów wyposazonajest obecnie wiekszosc serwisów udostepniajacych usługeprzechowywania repozytoriów.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 109 / 138

Page 110: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Tworzenie forka

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 110 / 138

Page 111: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Tworzenie forka

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 111 / 138

Page 112: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Praca z forkiem

$ git clone [email protected]:yuijim/acai.git↪→ acai-fork

Cloning into ’acai-fork’...[...]$ cd acai-fork$ git remote add upstream

↪→ [email protected]:maciekwielgosz/acai.git$ git remoteoriginupstream$ git branch

* master

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 112 / 138

Page 113: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Praca z forkiem

W czasie pracy z forkiem zwykle nie robi sie zmian bezposrednio nabranchu ’master’. Ma on słuzyc jako branch referencyjny, który moznałatwo synchronizowac z głównym repozytorium (’upstream’) przedrozpoczeciem kodowania.

$ git pull upstream masterremote: Counting objects: 4, done.remote: Compressing objects: 100% (4/4), done.remote: Total 4 (delta 3), reused 0 (delta 0)Unpacking objects: 100% (4/4), done.From bitbucket.org:maciekwielgosz/acai

* branch master -> FETCH_HEAD

* [new branch] master -> upstream/master[...]

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 113 / 138

Page 114: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Praca z forkiem

Wszystkie zmiany wprowadzane sa na dedykowanych branchach. Wten sposób mozna pracowac nad kilkomapoprawkami/funkcjonalnosciami jednoczesnie, zawsze majac jakobaze aktualna wersje kodu z głównego repozytorium. Dzieki takiemupostepowaniu nie ma problemów, jesli np. czesc zmian zostaniezaakceptowana, a czesc odrzucona.

$ git checkout -b fix-autoenvSwitched to a new branch ’fix-autoenv’

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 114 / 138

Page 115: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pull request

Gdy proponowane zmiany znajda sie juz na forku danego developera,nalezy stworzyc pull request, który nastepnie bedzie oczekiwał naakceptacje.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 115 / 138

Page 116: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pull request

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 116 / 138

Page 117: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Pull request

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 117 / 138

Page 118: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git

1 Systemy kontroli wersji2 Systemy scentralizowane a

rozproszone3 Git jako system lokalny

InicjalizacjaStany plikówZapis stanuHistoriaPraca z branchami

4 Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacjaModel pracy oparty o wielerepozytoriów

5 Inne mozliwosciIgnorowanie plikówKonfiguracjaWiecej o komendach iopcjachDodatkowa dokumentacja

6 Organizacja pracy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 118 / 138

Page 119: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Inne mozliwosci

Ignorowanie plikówKonfiguracja

Wiecej o komendach iopcjachDodatkowa dokumentacja

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 119 / 138

Page 120: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Ignorowanie plików

Plik .gitignore pozwala na ignorowanie niektórych plików i katalogów wprojekcie, np. plików wynikowych kompilacji czy automatycznych kopiizapasowych plików.

Zazwyczaj tworzy sie go w głównym katalogu projektu.

Moze on zawierac konkretne sciezki lub ogólne wzorce nazw plików.

Działa on tylko dla niesledzonych plików – pliki które zostały dodaneprzed jego stworzeniem (lub ich dodanie zostało wymuszone pomimoustawien w .gitignore) w dalszym ciagu beda sledzone.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 120 / 138

Page 121: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Ignorowanie plików

1 # Filesystem helper files2 .DS_Store3

4 # Temporary and binary files5 *~6 *.py[cod]7 *.so8 *.cfg9 !setup.cfg

10 *.orig11 *.log

Fragment przykładowego .gitignore

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 121 / 138

Page 122: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Inne mozliwosci

Ignorowanie plikówKonfiguracja

Wiecej o komendach iopcjachDodatkowa dokumentacja

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 122 / 138

Page 123: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Konfiguracja

Konfiguracja zachowania gita odbywa sie na trzech poziomach, zktórych kazdy nadpisuje ustawienia poprzedniego:

z systemowy – przechowywany w /etc/gitconfig, definiujezachowanie gita dla wszystkich uzytkowników,

z globalny – zwykle zapisany w $HOME/.gitconfig, definiujezachowanie dla danego uzytkownika,

z lokalny – znajduje sie w pliku .git/config w kazdym repozytorium idefiniuje specyficzne dla niego ustawienia.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 123 / 138

Page 124: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Konfiguracja

Pliki konfiguracyjne sa zwyczajnymi plikami tekstowymi, które moznazmieniac w dowolnym edytorze, jednak zwykle wygodniej posłuzyc siepoleceniem git config.

Domyslnie edytuje ono ustawienia na poziomie repozytorium.

By zmienic to zachowanie stosuje sie opcje --system lub --global.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 124 / 138

Page 125: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Dane uzytkownika

Jednymi z pierwszych ustawien, które powinny zostac dodane przyrozpoczynaniu pracy z gitem sa dane identyfikujace uzytkownika:

$ git config --global user.name "Maciej Wielgosz"$ git config --global user.email

↪→ [email protected]

Operacje te zazwyczaj wykonuje sie tylko raz w danym systemie.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 125 / 138

Page 126: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Inne mozliwosci

Ignorowanie plikówKonfiguracja

Wiecej o komendach iopcjachDodatkowa dokumentacja

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 126 / 138

Page 127: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Przydatne komendy

Oprócz omówionych, git dostarcza takze wielu innych komend orazopcji. Przykładowe z nich to:

z git blame – pozwala na podejrzenie kto wprowadził jakie zmiany(by miec pewnosc mozna skorzystac z podpisów elektronicznych),

z git stash – pozwala na tymczasowe zapisanie wyników pracy,z git tag – pozwala na stworzenie punktu odpowiadajacego np.

konkretnej wersji oprogramowania,z git revert – pozwala na wygodne i bezpieczne cofanie zmian,

które zostały juz opublikowane.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 127 / 138

Page 128: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Polecenia szczególnej ostroznosci

Uzywajac niektórych komend i opcji nalezy zachowac szczególnaostroznosc, poniewaz niewłasciwie uzyte moga doprowadzic do utratywyników pracy. Szczególnie warto uwazac przy stosowaniu:

z git reset --hard

z git checkout <filepath>

z git branch -D

z git commit --amend

z git rebase

z git push --force

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 128 / 138

Page 129: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Polecenia szczególnej ostroznosci

Przed czescia negatywnych skutków pomyłki moze ochronicwczesniejsze stworzenie commita, przed innymi – wykonanie „kopii”brancha. Jednak bład nie zawsze moze dac sie naprawic.

Niektórych z nich (ingerujacych w historie) nie powinno sie nigdyuzywac w odniesieniu do publicznych branchy, czy tez takich, które juzzostały gdzies dołaczone, w czesci badz całosci.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 129 / 138

Page 130: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Inne mozliwosci

Ignorowanie plikówKonfiguracja

Wiecej o komendach iopcjachDodatkowa dokumentacja

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 130 / 138

Page 131: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Dodatkowa dokumentacja i tutoriale

Dodatkowa dokumentacje dotyczaca gita mozna znalezc m.in.:

z https://git-scm.com/book/en/v2

z https://www.atlassian.com/git/tutorials

z https://training.github.com/kit/downloads/github-git-cheat-sheet.pdf

z https://try.github.io

z https://www.codecademy.com/en/courses/learn-git

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 131 / 138

Page 132: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git

1 Systemy kontroli wersji2 Systemy scentralizowane a

rozproszone3 Git jako system lokalny

InicjalizacjaStany plikówZapis stanuHistoriaPraca z branchami

4 Git jako system rozproszony

Zdalne repozytoriumPodstawowa synchronizacjaModel pracy oparty o wielerepozytoriów

5 Inne mozliwosciIgnorowanie plikówKonfiguracjaWiecej o komendach iopcjachDodatkowa dokumentacja

6 Organizacja pracy

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 132 / 138

Page 133: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git workflows

Sposób organizacji pracy z gitem w duzym stopniu zalezy odindywidualnych preferencji, potrzeb zespołu czy rozmiaru projektu.

Przed rozpoczeciem pracy warto ustalic nastepujace kwestiedotyczace pracy z VCS (i nie tylko):

z fork vs. branch – Czy współpraca ma byc oparta na forkach czyna branchach? A moze wszyscy beda pracowac na tym samymbranchu? Czy nalezy trzymac sie jakiejs konwencji przynazywaniu branchy?

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 133 / 138

Page 134: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git workflows

z rebase vs. merge – W zaleznosci od wybranej formy współpracymozliwe moze byc uzywanie rebase lub merge jakopodstawowego sposobu synchronizowania branchy. Który z nichjest preferowany?

z pull requests – jesli uzywane beda pull requesty – kto jestodpowiedzialny za ich akceptacje? Czy jest to np. jeden członekzespołu czy moze wystarczy, ze zatwierdzi go dowolny innydeveloper? A moze jest to tylko formalnosc i nic nie stoi naprzeszkodzie, by zatwierdzac własne pull requesty?

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 134 / 138

Page 135: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Git workflows

z architektura – kto decyduje o ogólnej architekturze projektu? Ostrukturze katalogów czy organizacji modułów, uzywanychbibliotekach (zwłaszcza jesli bedzie ona potrzebna w wielumiejscach)? Czy jest konkretna osoba odpowiedzialna zastworzenie ogólnej dokumentacji projektu, zdefiniowanieargumentów linii polecen itp?

z srodowisko – Kto odpowiada za aktualizacje zaleznosci projektu?Za stworzenie instrukcji instalacji?

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 135 / 138

Page 136: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Przydatne linki

z https://www.atlassian.com/git/tutorials/comparing-workflows

z https://guides.github.com/introduction/flow

z https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase

z http://nvie.com/posts/a-successful-git-branching-model

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 136 / 138

Page 137: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Tips & tricks

Istnieje wiele sposobów na ułatwienie sobie pracy z gitem, np.:

z konfiguracja powłoki, tak, by widoczny był aktywny branch orazjego status (bash, zsh),

z wtyczki badz wbudowane funkcje IDE, pozwalajace zapisywaczmiany czy synchronizowac repo bezposrednio w programie,

z dostosowana do osobistych preferencji konfiguracja gita, np.domyslny edytor czy aliasy komend (za inspiracje moze słuzychttp://documentup.com/skwp/git-workflows-book).

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 137 / 138

Page 138: Programowanie w jezykach skryptowych - Python i Linux Bashhome.agh.edu.pl/~wielgosz/?download=wyklad_git.pdf · Git 1 Systemy kontroli wersji 2 Systemy scentralizowane a rozproszone

Mozliwosci platform

Wiele platform dostarczajacych usługi udostepniania repozytorium gitpozwala na korzystanie z dodatkowych narzedzi optymalizujacychprace zespołowa z VCS. Dostepne moga byc m.in.:

z issues – system do zgłaszania błedów, zapotrzebowania na nowefunkcjonalnosci itp., pozwalajacy na ich komentowanie, czestowyposazony w dodatkowa kategoryzacje czy tagowanie

z wiki – słuzace do tworzenia dodatkowej dokumentacji do projektu,tutoriali, opisu przykładów itp.

z continuous integration & delivery – automatyczne testywykonywane po kazdym pushu, automatyczny deployment naserwer etc.

M. Wielgosz (AGH - IET) Programowanie w jezykach skryptowych - Python i Linux Bash 2015 138 / 138