Programowanie - prac.im.pwr.wroc. szwabin/assets/prog/lec/10.pdf · PDF fileSystemy...
date post
02-Mar-2019Category
Documents
view
212download
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