1 Systemy kontroli wersjiSebastian Wojczyk
2 Plan wykładu Kilka dat z historii, Przydane pojęcia,Do czego służą systemy kontroli wersji, Architektury systemów kontroli wersji, Najbardziej znane systemy kontroli wersji, System kontroli wersji GIT, Ogólne informacje, instalacja, konfiguracja, Tworzenie repozytorium, Statusy i cykl życia plików, Praca z repozytorium lokalnym, Praca z repozytorium zdalnym,
3 Rys historyczny 1969 – system UNIX, 1972 – język C, 1976 – diff,1982 – RCS, 1983 – język C++, 1986 – patch, 1986 – CVS, 1991 – system Linux, 2000 – SVN, 2000 – język C#, 2003 – system Linux – jądro w wersji 2.6, 2005 – GIT,
4 Definicja System kontroli wersji - oprogramowanie służące do śledzenia zmian głównie w kodzie źródłowym oraz pomocy programistom w łączeniu zmian dokonanych w plikach przez wiele osób w różnych momentach czasowych. Repozytorium - miejsce uporządkowanego przechowywania dokumentów (definicja ogólna), w przypadku systemów kontroli wersji miejsce przechowywania plików wraz z informacjami o wszystkich zarejestrowanych zmianach, Rewizja/Wersja - stan plików po wykonaniu określonej liczby zmian, każda operacja zapisu do repozytorium tworzy nową rewizję, Kopia robocza – kopia plików (najczęściej początkowo pobrana z repozytorium) służąca bieżącej pracy. Kopia robocza jest w pełni prywatna. Dokonane w niej zmiany mogą być zapisane do repozytorium.
5 Główne zadania Przechowuje bieżący stan projektu,Pomaga synchronizować pracę grupy programistów, Przechowuje historię zmian w projekcie, Pozwala przeglądać historię zmian projektu, Automatyzuje wiele czynności programistów, Porównywanie plików, Śledzenie zmian: zakres zmian, czas wprowadzenia, autora, Ułatwia zarządzanie wydaniami i wersjami projektu, Umożliwia tworzenie gałęzi projektu, Ułatwia poszukiwanie błędów.
6 Systemy lokalne
7 Systemy scentralizowane
8 Systemy rozproszone
9 Narzędzia wspomagającediff – program komputerowy działający w konsoli, wyświetlający różnice między dwoma plikami tekstowymi na poziomie poszczególnych wierszy. Ukazuje które wiersze występują w obu plikach, a które są unikalne. wiersze wspólne dla porównywanych plików nie są oznaczane, wiersze występujące tylko w pierwszym pliku są oznaczane -, wiersze występujące tylko w drugim pliku są oznaczane +, Czasami znaki -/+ zamieniane są na znaki >/<, wdiff – wersja diff operująca na pojedynczych słowach, patch – program komputerowy działający w konsoli, służący do zakładania/nakładania patchy (łat, łatek).
10 Popularne systemy RCS Revision Control SystemKontrola zmian w pojedynczych plików, Możliwość opisu każdej zmiany, Możliwość śledzenia i przeglądania zmian, Rozgałęzianie wersji (ang. branching), Scalanie wersji (ang. merging), Automatyczne porównywanie i scalanie plików, Praca nad projektem w jednej lokalizacji (system lokalny), Podstawowe blokowanie dostępu (ang. locking),
11 Popularne systemy CVS Concurrent Versions SystemPodstawowe funkcje wzięte jak w RCS, Zarządzanie dużymi projektami (tysiące plików), Równoległa praca nad tymi samymi plikami, Synchronizacja równoczesnych zmian przez wielu autorów, Centralne repozytorium dla całego projektu, Decentralizacja i rozproszenie pracy autorów, Synchronizacja repozytoriów z użyciem sieci, Złożona konfiguracja i zarządzanie repozytorium,
12 Popularne systemy SVN SubversionRejestruje historię dodatkowych informacji o pliku, nazwa, atrybuty, położenie, Dodatkowe dowolnie zdefiniowane atrybuty, Obsługa historii folderów, Atomowość transakcji na wielu plikach, Śledzenie operacji na plikach: Tworzenie, Kopiowanie, Przenoszenie, Zmiana nazwy, Usuwanie, Implementacja w postaci modułu serwera Apache (dostępność),
13 Popularne systemy GIT Rozproszenie systemu – każde repozytorium jest pełnowartościowe, Przyspieszenie pracy przy dużych projektach (większość operacji to praca lokalna), Prostota konstrukcji, Dwustopniowa historia plików (lokalna i globalna), Możliwość pracy offline (na lokalnym repozytorium), Możliwość edycji zmian (opis, dodanie czy wyłączenie pliku), Możliwość wycofywania zmian,
14 Przechowywanie historii zmianRCS CVS SVN Git
15 GIT – instalacja System dedykowany dla systemu Linux,Można korzystać pod Windows Emulator Linux (Cygwin), Konsola bash, Podstawowe GUI Uruchamiane menu kontekstowym w katalogu repozytorium, Strona domowa projektu
16 GIT – wstęp git config user.name "Jan Nowak"git config user. Ustawia identyfikator użytkownika i adres mailowy, Informacje służące do określania autorów zmian w repozytorium, Opcja --global pozwala zrobić te ustawienia dla całego systemu, git config user.name Wyświetla aktualną nazwę użytkownika, git config --list Wyświetla aktualną pełną konfigurację repozytorium, git help
17 GIT – tworzenie repozytoriumgit init Inicjuje nowe repozytorium w bieżącej lokalizacji, Tworzy katalog .git który przechowuje repozytorium, git add plik1.cc Dodanie pojedynczego pliku do poczekalni, git add *.cs Dodanie grupy plików do poczekalni zgodnie z wyrażeniem, git add –all Dodanie wszystkich plików do poczekalni, git commit -m ’zainicjowane repozytorium’ Zapisanie do repozytorium wszystkich plików wcześniej dodanych do poczekalni ze wskazanym komentarzem, git clone protokół://adres Klonowanie istniejącego repozytorium, Protokoły: git, http, https, (z użyciem ssh)
18 GIT – statusy plików Pliki nieśledzone, Pliki śledzone,Pliki których nie chcemy zapamiętywać i śledzić ich historii, Pliki tymczasowe, Kopie zapasowe plików, Pliki śledzone, Niezmodyfikowane, Zawartość zgodna z ostatnio zapamiętaną w repozytorium wersją, Zmodyfikowane, Zawartość zmieniona w stosunku do ostatnio zapamiętanej w repozytorium wersji, W przechowalni, Plik oznaczony jako gotowe do zapisania w następnej wersji,
19 GIT – cykl życia plików git status Sprawdzenie statusu plików
20 GIT – pliki nieśledzonePliki które nie są analizowane przez GITa (nie dodane do śledzenia), Można wymusić ignorowanie pewnych plików Pliki konfiguracyjne do ignorowania plików lub katalogów, .git/info/exclude .gitignore Nazwy konkretnych plików, Nazwy konkretnych katalogów, Nazwy ścieżkowe „od bieżącego katalogu”, Wyrażenia regularne do nazw plików i katalogów, *.bak – wszystkie pliki „bak” w bieżącym katalogu, /bak/* – wszystkie pliki w katalogu bak /bak/** – wszystkie pliki w katalogu bak i jego podkatalogach **/*.bak – wszystkie pliki „ bak” w dowolnym podkatalogu Można negować wyrażenia rozpoczynając znakiem !
21 GIT – pliki śledzone git add
22 GIT – zatwierdzanie zmiangit commit Wysyła do repozytorium pliki z poczekalni, git commit –v Dodatkowo w komentarzu dodaje pełnego diffa zmienionych plików, git commit –a Pomija poczekalnię i dodaje do repozytorium wszystkie zmodyfikowane śledzone pliki, git commit –m ’ tekst’ Z linii komend pozwala ustalić tekst komentarza dla zapisu do repozytorium.
23 GIT – przegląd historiigit log Listuje wszystkie zmiany w kolejności od najnowszych do najstarszych, git log
24 GIT – przegląd historii 2git log --pretty=oneline Wyświetla skróty i komentarze do kolejnych rewizji, git log --pretty=format:"%ar : %s" Wyświetla raport w zadanym formacie (ar – autor, s – komentarz), Dostępnych wiele innych predefiniowanych zmiennych, git log --since=2.weeks Wyświetla zmiany z ostatnich dwóch tygodni, git log --since=" " –until=" " Wyświetla zmiany z zadanego okresu, I wiele innych opcji
25 GIT – wycofywanie zmiangit reset HEAD
26 GIT – zdalne repozytoriagit remote Wyświetla nazwy zarejestrowanych zdalnych repozytoriów, git remote -v Wyświetla nazwy zdalnych repozytoriów i ich pełne URL-e, git remote add
27 GIT – bibliografia Scott Chackon, Pro Git, http://git-scm.com/bookDokumentacja systemu GIT