300 likes | 545 Views
Systemy kontroli wersji. Sebastian Wojczyk wojczyk@math.uni.lodz.pl. 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,
E N D
Systemy kontroli wersji Sebastian Wojczyk wojczyk@math.uni.lodz.pl
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,
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,
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.
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.
Narzędzia wspomagające • diff– 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).
Popularne systemyRCS Revision Control System • RCS - Revision Control System • Kontrola 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),
Popularne systemyCVS ConcurrentVersions System • Podstawowe 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,
Popularne systemySVNSubversion • Rejestruje 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ść),
Popularne systemyGIT • 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,
Przechowywanie historii zmian • RCSCVSSVN • Git
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 http://git-scm.com/
GIT – wstęp • gitconfiguser.name "Jan Nowak" • gitconfig user.email "jan@domena.pl" • 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 configuser.name • Wyświetla aktualną nazwę użytkownika, • git config --list • Wyświetla aktualną pełną konfigurację repozytorium, • git help <polecenie> • Wyświetla tekst pomocy dla polecenia (w przeglądarce).
GIT – tworzenie repozytorium • git 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, uzytkownik@serwer (z użyciem ssh)
GIT – statusy plików • Pliki nieś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,
GIT – cykl życia plików • git status • Sprawdzenie statusu plików
GIT – pliki nieśledzone • Pliki 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 !
GIT – pliki śledzone • git add <plik> • Dodanie nowych plików do śledzenia i do poczekalni, • Dodanie już śledzonych plików do poczekalni (w chwili wykonania polecenia), • git diff • Pokazuje różnice pomiędzy śledzonymi plikami a poczekalnią/repozytorium, • git diff <plik> • Pokazuje różnice pomiędzy wskazanym plikiem a poczekalnią/repozytorium, • git diffHEAD <plik> • Pokazuje różnice pomiędzy wskazanym plikiem roboczym a repozytorium, • git diffHEAD^ <plik> • Pokazuje różnice pomiędzy wskazanym plikiem roboczym a repozytorium (poprzednia wersja), • git diff --cached lub git diff --staged • Pokazuje różnice pomiędzy plikami z poczekalni a repozytorium, • git rm <plik> • Usuwa fizycznie plik z dysku i przekazuje operację usunięcia do poczekalni, • git rm --cachedlub git rm --staged • Usuwa plik z plików śledzonych i przekazuje operację usunięcia do poczekalni; nie usuwa fizycznie pliku z dysku (przydatne gdy chcemy plik np. ignorować), • git mv <old> <new> • Zmienia nazwę pliku na nową i przekazue operację zmiany do poczekalnirównoważne z ciągiem pleceń „mv <old> <new>; git rm <old>; git add <new>”,
GIT – zatwierdzanie zmian • git 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.
GIT – przegląd historii • git log • Listuje wszystkie zmiany w kolejności od najnowszych do najstarszych, • git log <plik> • Listuje zmiany dotyczące wskazanego pliku w kolejności od najnowszych do najstarszych, • git log -p • Opcja -p dodatkowo wyświetla diff dla każdej zmiany, • git log -3 • Opcja -3 wyświetla tylko 3 ostatnie wpisy, • git log --stat • Opcja --statwyświetla statystyki zmian • Ilości plików zmienionych, dodanych, usuniętych, • Ilości nowych „wstawek” i „usunięć” w plikach (diff), • git log --author • Wyświetla zmiany danego autora,
GIT – przegląd historii 2 • git 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="2000-01-01" –until="2005-12-31" • Wyświetla zmiany z zadanego okresu, • I wiele innych opcji
GIT – wycofywanie zmian • git reset HEAD <plik> • Usunięcie pliku z poczekalni (teraz jest tylko śledzony), • git checkout <plik> • Przywrócenie pliku do stanu z ostatniej rewizji (ostatni commit), • git checkoutHEAD^ <plik> • Przywrócenie pliku do stanu z przed-ostatniej rewizji, • git checkout HEAD^^ <plik> • Przywrócenie pliku do stanu z przed-przed-ostatniej rewizji, • git commit --amend • Ponowienie operacji commit z uwzględnieniem aktualnej poczekalni; Jeśli w poczekalni nic się nie zmieniło to tylko możliwość zmiany komentarza,
GIT – zdalne repozytoria • git remote • Wyświetla nazwy zarejestrowanych zdalnych repozytoriów, • git remote -v • Wyświetla nazwy zdalnych repozytoriów i ich pełne URL-e, • git remoteadd <nazwa> <url> • Dodaje nowy wpis do listy zdalnych repozytoriów, • git push • Wypycha zmian z lokalnego do zdalnego repozytorium • git fetch • Pobiera zmiany ze zdalnego do lokalnego repozytorium • git pull • Pobiera zmiany ze zdalnego do lokalnego repozytoriumi dodatkowo scala je (merge) z naszą kopią roboczą,
GIT – bibliografia • Scott Chackon, Pro Git, http://git-scm.com/book • Dokumentacja systemu GIT