Programowanie - prac.im.pwr.wroc. szwabin/assets/prog/lec/10.pdf · PDF fileSystemy...

Click here to load reader

  • date post

    02-Mar-2019
  • Category

    Documents

  • view

    212
  • download

    0

Embed Size (px)

Transcript of Programowanie - prac.im.pwr.wroc. szwabin/assets/prog/lec/10.pdf · PDF fileSystemy...

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 1/39

Programowanie

Systemy kotroli wersji

Janusz Szwabiski

Plan wykadu:

MotywacjaPrzegld dostpnych systemwGitGit na WindowsGithubSubversionSubversion na WindowsDobre praktyki kontroli wersji

Materiay do wykadu

Dokumentacja gita: https://git-scm.com/doc (https://git-scm.com/doc)Essential git, https://nhs.io/git/ (https://nhs.io/git/)A. Bystrek, Git tutorial - jak zaczc z Git, http://poznajprogramowanie.pl/git-tutorial-jak-zaczac-z-git/(http://poznajprogramowanie.pl/git-tutorial-jak-zaczac-z-git/)Dokumentacja SVN: https://subversion.apache.org/docs/ (https://subversion.apache.org/docs/)TortoiseSVN: https://tortoisesvn.net/support.html (https://tortoisesvn.net/support.html)Dokumentacja Mercuriala: https://www.mercurial-scm.org/guide (https://www.mercurial-scm.org/guide)

https://git-scm.com/dochttps://nhs.io/git/http://poznajprogramowanie.pl/git-tutorial-jak-zaczac-z-git/https://subversion.apache.org/docs/https://tortoisesvn.net/support.htmlhttps://www.mercurial-scm.org/guide

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 2/39

Motywacja

Z ycia wzite...

Brak kontroli wersji

czsto spotykany w jednoosobowych projektachczsto generujcy cakowit lub czciow utrat plikw (gwnie przez nadpisanie)

Rczna kontrola wersji

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 3/39

cigle popularna metodahistoria zmian czsto wpisana do plikw rdowychrczne kopie zapasoweuciliwe scalanie zmian pochodzcych od rnych programistw

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 4/39

sabo skaluje si z liczb programistwbardzo trudno jest zachowa informacj o kolejnoci i autorstwie zmianpodatna na bdy, zwaszcza w "gorcych" okresach ycia projektuw przypadku problemw wymaga z reguy duych nakadw czasu i pracy potrzebnych doodtworzenia projektu

Systemy kontroli wersji

system kontroli wersji (ang. version/revision control system) oprogramowanie przechowujcehistori zmian dokonanych w kodzie rdowym lub innych dokumentachpo co?:

uatwienie kontroli nad projektemledzenie zmian w projekcieprzechowywanie rnych wersji projektuuatwienie wsppracy nad projektemszybki powrt do ostatniej dziaajcej wersji w przypadku bdwautomatyzacja kopii zapasowych

rodzaje:lokalnerozproszonescentralizowane

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 5/39

Przegld dostpnych systemwCVSSubversionGitMicrosoft Visual SourceSafeVisual Studio Team SystemMercurialBazaarDarcsSVK

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 6/39

Git

Krtka historia Git

jdro Linuksa jest duym projektem otwartego oprogramowaniaw latach 1991-2002 zmiany w rdle byy przekazywane jako aty (ang. patches) i zarchiwizowaneplikiw 2002 projekt jdra Linuksa zacz uywa systemu DVCS BitKeeperw 2005 cofnito projektowi pozwolenie na nieodpatne uywanie systemuskonio to twrc Linuksa, Linusa Torvaldsa, i pozostaych programistw do stworzenia wasnegosystemucechy tego systemu zdefiniowane zostay na podstawie wiedzy wyniesionej z uywania BitKeepera:

szybkoprosta konstrukcjasilne wsparcie dla nieliniowego rozwoju (tysice rwnolegych gazi)wydajna obsuga duych projektw

w wyniku tych prac powsta Gitobecnie to jeden z najpopularniejszych rozproszonych systemw kontroli wersji

Podstawy Git

Migawki

wikszo systemw kontroli wersj przechowuje informacje jako list zmian na plikach:

Git traktuje dane jak zestaw migawek (ang. snapshots) maego systemu plikwprzy kadym wysaniu zmian albo zapisaniu stanu projektu Git tworzy obrazprzedstawiajcy to jak wygldaj wszystkie pliki w danym momencie i przechowujereferencj do tej migawkiw celu uzyskania dobrej wydajnoci, jeli dany plik nie zosta zmieniony, Git nie zapisujeponownie tego pliku, a tylko referencj do jego poprzedniej, identycznej wersji

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 7/39

Operacje o charakterze lokalnym

wikszo operacji w Git do dziaania wymaga jedynie dostpu do lokalnych plikw i zasobwnie s potrzebne adne dane przechowywane na innym komputerze w siecikompletna historia projektu znajduje si w caoci na dysku lokalnymdziki temu odnosi si wraenie, e wikszo operacji dziaa niemal natychmiastdziki temu rwnie mona zrobi prawie wszystko bdc poza zasigiem sieci:

jeli synchronizujemy zmiany z serwerem zdalnym, moemy przesa cay ich pakiet poodzyskaniu poczenia z sieci

Mechanizmy spjnoci danych

dla kadego obiektu Git wyliczana jest suma kontrolna (skrt SHA-1) przed jego zapisemna jej podstawie mona odwoywa si do danego obiektunie ma moliwoci zmiany zawartoci adnego pliku, czy katalogu bez reakcji ze strony Gitnie ma szansy na utrat informacji, czy uszkodzenie zawartoci pliku podczas przesyania lubpobierania danych, bez moliwoci wykrycia takiej sytuacji przez Git

Trzy stany

git wyrnia 3 stany plikw:zatwierdzony - dane zapisane bezpiecznie w lokalnej bazie danychzmodyfikowany - plik zosta zmieniony, ale zmiany nie zostay wprowadzone do bazyledzony - plik zosta przeznaczony do zatwierdzenia w biecej postaci w nastpnejoperacji zatwierdzania zmian (ang. commit)

ze stanami zwizane s 3 gwne sekcje projektu Git:katalog Git (repozytorium) - miejsce, w ktrym Git przechowuje wasne metadane orazobiektow baz danych projektu. To najwaniejsza cz Git i to wanie ten katalog jestkopiowany podczas klonowania repozytorium z innego komputerakatalog roboczy - obraz jednej wersji projektu. Zawarto tego katalogu pobierana jest zeskompresowanej bazy danych zawartej w katalogu Git i umieszczana na dysku w miejscu,w ktrym mona j odczyta lub zmodyfikowaprzechowalnia (staging area) - prosty plik, zwykle przechowywany w katalogu Git, ktryzawiera informacje o tym, czego dotyczy bdzie nastpna operacja zatwierdzania zmian

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 8/39

Instalacja Git

najlepsz metod jest instalacja ze rde, do pobrania pod adresem http://git-scm.com/download(http://git-scm.com/download)

w ten sposb mamy do dyspozycji najnowsz wersjpakiety binarne pod Linuksem: yum install git-core apt-get install gitpakiety binarne dla MacOS: sudo port install git-core +svn +doc +bash_completion +gitwebinstalacja w systemie Windows

instalator do pobrania pod adresem http://msysgit.github.com/ (http://msysgit.github.com/)

http://git-scm.com/downloadhttp://msysgit.github.com/

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 9/39

Wstpna konfiguracja

git config - narzdzie konfiguracyjnekonfiguracj wystarczy przeprowadzi raz - bdzie obowizywa rwnie po aktualizacji Gitatrzy pliki konfiguracyjne (kady z nich ma priorytet wyszy od poprzednika):

/etc/gitconfig - wartoci zmiennych widoczne dla kadego uytkownika w systemieoraz dla kadego z ich repozytoriw. Dodajc opcj --system do polecenia git config, odczytane bd zapisane zostan zmienne z tej wanie lokalizacji~/.gitconfig - lokalizacja specyficzna dla danego uytkownika. Za pomoc opcji --global mona uzyska dostp do tych wanie zmiennychplik konfiguracyjny w katalogu git biecego repozytorium (tzn. .git/config) zawierakonfiguracj charakterystyczn dla tego konkretnego repozytorium

Tosamo uytkownika

git config --global user.name "Jan Nowak" git config --global user.email jannowak@example.com

opcja --global powoduje, e kada operacja bdzie od tego momentu korzystaa z tych danychjeli zaistnieje potrzeba zmiany tych informacji dla konkretnego projektu, mona skorzysta z git config bez opcji --global

Edytor

git config --global core.editor nano

domylny edytor tekstowyw przeciwnym razie Git bdzie korzysta z vi/vim, ktre zazwyczaj s zainstalowane w systemie (zrodziny Unix/Linux)

Narzdzie obsugi rnic

git config --global merge.tool vimdiff

uywane przy rozstrzyganiu rnic i problemw podczas edycji konfliktw powstaych w czasieoperacji czenia (ang. merge)inne moliwe narzdzia: kdiff3, tkdiff, meld, xxdiff, emerge, gvimdiff, ecmerge oraz opendiff

Sprawdzanie ustawie

git config --list git config user.name

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 10/39

Pierwsze kroki - uzyskiwanie pomocy

git help git --help man git-

nie wymagaj poczenia z Internetem

Pierwsze repozytorium Git

dwie metody:importowanie istniejcego katalogu lub projektu do Gitasklonowanie istniejcego repozytorium z serwera

Inicjalizacja Git w istniejcym katalogu

przechodzimy do katalogu projektu (moe by pusty)wykonujemy polecenie

git initutworzony zostanie podkatalog .git zawierajcy wszystkie niezbdne pliki - szkielet repozytoriumGitjeli w katalogu znajdoway si jakie pliki, powinnimy rozpocz ich ledzenie i utworzypocztkow wersj projektu poleceniami:

git add *.py

git add Readme

git commit -m 'Initial project version'

Klonowanie istniejcego repozytorium

poleceniem clone pobierzemy kopi niemale wszystkich danych posiadanych przez serwer

git clone git://github.com/vinta/awesome-python

kilka protokow transmisji: git, http(s), ssh

9.06.2017 10_cvs

file:///home/szwabin/Dropbox/Zajecia/Programowanie/Lectures/10_cvs.html 11/39

Rejestrowanie zmian w repozytorium

za kadym razem, kiedy po naniesieniu zmian projekt osignie stan, ktry powinie