Systemy kontroli wersji

Podobne dokumenty
Adam Wójs <adam[shift+2]wojs.pl> git --wprowadzenie

System kontroli wersji Git

Wprowadzenie do systemu wersjonowania svn

Ćwiczenia 9: Zarządzanie konfiguracją Zadania:

System kontroli wersji git

Systemy kontroli wersji

Co zostanie wypisane na ekranie? (1)

Programowanie I

GIT. System Kontroli wersji GIT. Rafał Kalinowski

Drupal i GIT. Schemat pracy.

Git, Bitbucket. Narzędzia i środowiska programistyczne. Laboratorium 2. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Git - podstawy. Błażej Kowalczyk. Koło Naukowe Robotyków KoNaR. 7 listopada 2014

System kontroli wersji, system zarządzania kodem źródłowym

Rozproszony system kontroli wersji GIT. Piotr Macuk

Programowanie zespołowe

Programowanie zespołowe

CVS system kontroli wersji

Jak usprawnić tworzenie i zarządzanie stroną na drupalu. Maciej Łukiański

Open Source w służbie developerom

SVN sojusz, partnerstwo, współpraca

Assembla.com zajęcia 1

Zarządzanie projektami informatycznymi

Systemy kontroli wersji git od wewnatrz Użycie gita Koniec. git. Rozproszony system kontroli wersji. sphere.pl. Koło Naukowe Sfera

Michał (plucho) Subversion Wykorzystanie i administracja repozytorium

Git, Bitbucket, IntelliJ IDEA

Podstawowy warsztat informatyka

Użytkowanie PortableGit w systemie Windows. 1. Najważniejsze informacje

Podstawowy warsztat informatyka

Tak. Konrad Ktoso Malawski blog.project13.pl - SFI

SUBVERSION TOMASZ ŁUKASZUK

Programowanie Zespołowe

GIT. Rozproszony system kontroli wersji

1 Tworzenie własnego zaproszenia dla powłoki bash

Programowanie. Systemy kotroli wersji. Janusz Szwabiński. Plan wykładu:

Git rozproszony system kontroli wersji

Systemy zarządzania wersjami

Środowisko programisty. Środowisko programisty 1/35

Leszek Stasiak Zastosowanie technologii LINQ w

Partnerzy: Laboratorium 15

Przykładowe zadanie z unikania blokad.

ponad pracowników ponad pracowników ponad pracowników ponad pracowników

Przewodnik Szybki start

Podstawy inżynierii oprogramowania

Git i platforma GitHub

1 Tworzenie własnego zaproszenia dla powłoki bash

Gra-zabawka dla niemowląt przygotowana z użyciem w Unity 3D

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

WYZWANIA EDUKACYJNE EDUKACJA DLA KAŻDEGO PORADY MAŁEJ EWUNI DUŻEJ EWIE. Dziecko jest mądrzejsze niż myślisz. Ewa Danuta Białek

MBUM #2. Zarządzanie kopiami konfiguracji RouterOS. Jacek Rokicki

Informatyka II. Laboratorium Aplikacja okienkowa

Packet Tracer - Podłączanie routera do sieci LAN

Backend Administratora

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Technologie Komponentowe. Piotr Łukasik p /

Formatowanie warunkowe

Dostosowanie szerokości kolumn

Laboratorium - Podgląd informacji kart sieciowych bezprzewodowych i przewodowych

Konfiguracja i administracja systemem kontroli wersji SVN

1. System kontroli wersji Instalacja programu kontroli wersji CVS

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Scalanie kilku plików JPK-VAT

Assembla.com część 2. Serwis Wiki. Autor: Marcin Gadamer

Platforma GitHub. 1 Cel laboratoriów. 2 GitHub. 2.1 Git. źródeł.

Lekcja : Tablice + pętle

Sprawdzian kompetencji trzecioklasisty 2014

Michał Kazimierz Kowalczyk rok 1, semestr 2 nr albumu indeksu: Algorytmy i struktury danych. Problem połączeń

Git - Rozproszony System Kontroli Wersji

5.4. Tworzymy formularze

Poradnik obsługi sklepu internetowego opartego o wtyczkę WooCommerce

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Continuous Integration z ClickOnce

git krótki przewodnik

Tutorial. HTML Rozdział: Ramki

Subversion - jak dziaªa

Twój Salon Kosmetyczny na. Twój doradca w internecie

Laboratorium - Konfiguracja karty sieciowej do korzystania z serwera DHCP w systemie Windows 7

1. Zaczynamy! (9) 2. Edycja dokumentów (33)

Programowanie w językach skryptowych - Python i Linux Bash

Tutorial Gita. Jacek Bzdak

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

GOTUJ SIĘ NA SUKCES OPROGRAMOWANIE SPRZĘT WDROŻENIA SZKOLENIA

Copyright 2015 Monika Górska

Projektowanie oprogramowania systemów NARZĘDZIA PRACY GRUPOWEJ, KONTROLI WERSJI, DOKUMENTOWANIA I ŚLEDZENIA BŁĘDÓW

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Konfiguracja serwera DNS w systemie Windows Server 2008 /2008 R2

Jak to się robi w praktyce?

Asus RT-G32. Co w zestawie?

Narzędzia programistyczne - GIT

T: Zabezpieczenie dostępu do komputera.

[WYSYŁANIE MAILI Z PROGRAMU EXCEL]

Instrukcja automatycznego tworzenia pozycji towarowych SAD na podstawie danych wczytywanych z plików zewnętrznych (XLS).

Projekt i implementacja systemu informatycznego synchronizacji plików. w sieci wg ustalonych kryteriów. Maciej Tomaszewski

Jak nie zostać niewolnikiem kalkulatora? Obliczenia pamięciowe i pisemne.

Program szkolenia: Continuous Integration i Git

Korzystanie z VCS oznacza również, że jeśli coś zepsujesz lub utracisz pliki, możesz je łatwo odzyskać.

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

System Zarządzania Treścią

Istnieją trzy sposoby tworzenia kopii zapasowej na panelu Comfort:

ADRESOWA WITAJ W INFORMATORZE TALK FUSION O KSIĄŻCE ADRESOWEJ

Git Podstawowe pojęcia, instalacja i konfiguracja

Transkrypt:

Systemy kontroli wersji Git Część II Gałęzie Aleksander Lamża ZKSB Instytut Informatyki Uniwersytet Śląski w Katowicach aleksander.lamza@us.edu.pl

Zawartość Gałęzie Wstępne wymagania Wprowadzenie do systemów kontroli wersji Podstawy Git-a

Gałęzie Gałęzie są megawygodne! Dlaczego?

Gałęzie Dlatego, że dzięki nim można pracować nad oprogramowaniem bez potrzeby mieszania w głównej linii rozwoju i bez częstego cofania wprowadzonych zmian.

Gałęzie zasada działania Aby w pełni zrozumieć, jak działają gałęzie, musimy poznać wewnętrzną strukturę repozytorium Git-a. Przede wszystkim Git przechowuje migawki (a nie różnice, jak wiele innych systemów kontroli wersji) snaphots plik 1 Commit Migawka plik 2 plik N

Gałęzie zasada działania Przy wielu commitach sytuacja wygląda tak: Commit 74df7 Migawka C parent: cc582 parent: 13b66 Commit cc582 Migawka B Commit 13b66 Migawka A commity (i nie tylko) są oznaczane haszami SHA-1 (np. cc582b94cc2d1595e00508223858a7daa93ac3f6)

Gałęzie zasada działania Gałąź jest wskaźnikiem na commit Commit 74df7 Migawka C Domyślna gałąź rozwoju nosi nazwę Commit d7a01 Migawka B Commit 13b66 Migawka A

Gałęzie zasada działania Co się stanie, kiedy utworzymy nową gałąź? git branch test Tworzenie gałęzi jest mało kosztowne (sprowadza się do utworzenia 41-bajtowego pliku) 74df7 test d7a01 13b66

Gałęzie zasada działania Skąd wiedzieć, na której gałęzi się siedzi? Służy do tego specjalny wskaźnik HEAD Uwaga! W innych systemach kontroli wersji (np. SVN) HEAD jest czymś trochę innym HEAD 74df7 test d7a01 13b66

Gałęzie zasada działania Polecenie git branch jedynie tworzy gałąź, ale na nią nie przeskakuje. Do przeskakiwania na inne gałęzie służy polecenie git checkout test 74df7 test HEAD d7a01 13b66

Gałęzie zasada działania Co się stanie, jeżeli w nowej gałęzi zrobimy commit? $ git commit -m "zmiana w gałęzi test" [test 70f32aa] zmiana w gałęzi test 70f32 test HEAD 74df7 d7a01 HEAD wskazuje teraz nowe położenie gałęzi test, która przesunęła się do przodu a gałąź nadal wskazuje poprzedni commit. 13b66

Gałęzie zasada działania No dobra, a gdybym przeskoczył do gałęzi $ git checkout Switched to branch '' zmodyfikował plik i zrobił kolejny commit? $ git commit -m "zmiana w gałęzi " [ 46bff37] zmiana w gałęzi?

Gałęzie zasada działania HEAD 46bff 70f32 test HEAD przeszło do gałęzi (git checkout ) 74df7 gałąź test bez zmian nowy commit w gałęzi d7a01 13b66

Gałęzie zasada działania Jak widać, dzięki gałęziom można tworzyć całkiem rozbudowane struktury rozwoju

Gałęzie Wszystko pięknie, ale co z tego wynika?

Gałęzie Dzięki temu, że tworzenie gałęzi jest tak proste (i mało kosztowne, więc szybkie), podczas pracy nad projektem można z nich intensywnie korzystać. a nawet trzeba! Przydałoby się kilka praktycznych przykładów, prawda?

Gałęzie w praktyce proste scalanie Jest sobie pewien projekt: C1 C2 C3 Twoim zadaniem na dziś jest napisanie klasy Foo. Od czego zaczynasz? Tworzysz nową gałąź. $ git branch foo $ git checkout foo Switched to branch 'foo' C1 C2 C3 To samo można załatwić szybciej: git checkout -b foo foo

Gałęzie w praktyce proste scalanie Tworzysz klasę i sobie nad nią pracujesz, od czasu do czasu robiąc commity: Praca, praca i jeszcze raz praca $ git commit -m "C4" $ git commit -m "C5" C1 C2 C3 C4 C5 foo

Gałęzie w praktyce proste scalanie Klasa Foo napisana i przetestowana! Co teraz? Scalasz swoją gałąź z główną gałęzią. git merge foo Najpierw przeskakujemy na Później dołączamy zmiany z foo Fast forward oznacza, że w celu scalenia wystarczyło przesunąć wskaźnik gałęzi do przodu. $ git checkout $ git merge foo Updating 2215776..fe74e58 Fast-forward Foo 1 + 1 file changed, 1 insertion(+) create mode 100644 Foo C1 C2 C3 C4 C5 foo

Gałęzie scalanie To scalanie gałęzi to bułka z masłem. Ale chwila Co by się stało, gdyby podczas pracy w gałęzi foo zmieniła się gałąź?

Gałęzie w praktyce scalanie trochę bardziej skomplikowane Ech, te małpy tylko by szukały problemów No dobra, sytuacja wygląda tak: Zmieniłeś coś w gałęzi, a następnie zrobiłeś commit (C6). C4 C5 C6 C7 foo Musiałeś jednak jeszcze coś zmienić w klasie Foo, więc przeskoczyłeś do gałęzi foo, wprowadziłeś zmiany i zrobiłeś commit (C7). Teraz chcesz scalić: Niby w porządku, ale wygląda inaczej Gdzie fast forward? $ git checkout $ git merge foo Merge made by the 'recursive' strategy. Foo 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)

Gałęzie w praktyce scalanie trochę bardziej skomplikowane Nie da się szybko przewinąć wskaźnika, bo commit C7 (z gałęzi foo) nie jest bezpośrednim potomkiem ostatniego commita z (C6). C4 C5 C6 C8 Git tworzy nowy commit jako sumę : C7 C5 + C6 + C7 Wspólnym potomkiem obu commitów jest C5, więc foo Uff Dobra wiadomość jest taka, że wszystko poszło gładko. Niestety jest też zła wiadomość nie zawsze wszystko idzie gładko

Gałęzie scalanie Czasem dochodzi do konfliktów

Gałęzie konflikty i ich rozwiązywanie W gałęzi w klasie Foo zmodyfikowałeś metodę bar() a następnie zrobiłeś commit (C10). C8 C9 C10 public class Foo { } public void bar(int p) { } public class Foo { } public void bar() { } C11 foo W gałęzi foo również zmodyfikowałeś (ty lub ktoś inny) metodę bar() klasy Foo, a następnie zrobiłeś commit (C11). public class Foo { } public void bar(string p) { } Teraz chcesz scalić zmiany z obu gałęzi

Gałęzie konflikty i ich rozwiązywanie No to scalamy: $ git checkout $ git merge foo Git wykrył konflikt nie udało się automatycznie połączyć zmian. Auto-merging Foo CONFLICT (content): Merge conflict in Foo Automatic merge failed; fix conflicts and then commit the result. Plik Foo wygląda teraz tak: Wszystko między <<<<<< HEAD i ======= pochodzi z gałęzi (tam był ustawiony HEAD) a wszystko od ======= do >>>>>> foo to zmiany z gałęzi foo. public class Foo { <<<<<<< HEAD public void bar(int p) { ======= public void bar(string p) { >>>>>>> foo } } Sami musimy się zająć scaleniem (poprzez edycję pliku), bo tego typu konfliktu Git nie rozwiąże.

Gałęzie konflikty i ich rozwiązywanie Jest dostępnych kilka narzędzi, które mogą pomóc w ręcznym scalaniu, np. xxdiff: C9 C10 C11 foo

Gałęzie konflikty i ich rozwiązywanie Po rozwiązaniu konfliktu trzeba ręcznie zrobić commit: C8 C9 C10 C12 C11 foo

Gałęzie zarządzanie gałęziami Podczas pracy z gałęziami przydaje się kilka poleceń: git branch $ git branch foo * Wyświetla listę gałęzi (* oznacza bieżącą) git branch -v $ git branch foo 9cc8e56 C11 * 1dcd4d8 C12 Wyświetla listę gałęzi wraz z commitami git branch --merged Wyświetla listę scalonych gałęzi (dostępny jest też przełącznik --no-merged)

Gałęzie zarządzanie gałęziami Gałęzie można też usuwać: git branch -d foo Gdyby w gałęzi zostały wprowadzone zmiany, ale nie zostały scalone, usuwanie by się nie powiodło: $ git branch -d foo error: The branch foo is not an ancestor of your current HEAD.

Co dalej? Praca zespołowa GitHub