wersjonowanie kodu. dobre praktyki na przykładzie przejścia z cvs na gita
DESCRIPTION
Zdobądź wiedzę z Performance MediaTRANSCRIPT
Wersjonowanie kodu
Dobre praktyki na przykładzie przejścia z CVS na GITa
Lublin, 2013
Marek Misztal
• 2005 – 2010 Politechnika Lubelska, kierunek Informatyka
• Obecnie programista w firmie Performance Media
• Wykorzystywane technologie:
• PHP 5 (Zend, Symfony, Kohana),
• MySQL 5,
• JS (jQuery),
• XHTML, CSS.
• Inne zainteresowania informatyczne: wirtualizacja Microsoft Hyper-V, VMware ESXi, VirtualBox
• Czas wolny: rower, góry
Wersjonowanie kodu
Agenda
• Wprowadzenie do kontroli wersji
• Porównanie CVS i GIT
• Historia GITa
• Podstawy GITa
• Praca na gałęziach
• Projekt SeoSpace
• Warto wiedzieć
Wersjonowanie kodu
Wprowadzenie do kontroli wersji
Wersjonowanie kodu
Co to jest kontrola wersji
Lokalne systemy kontroli wersji
Wersjonowanie kodu
Kopie plików
Lokalny system kontroli wersji – RSC (Unix)
Poprzednie wersje (Windows)
Aplikacje do automatycznego wykonywania kopii
Scentralizowane systemy kontroli wersji
Wersjonowanie kodu
Współpraca z innymi programistami, CVCS
Główny serwer:
łatwe zarządzanie uprawnieniami
zawiera wszystkie pliki projektu
przechowuje historię wszystkich zmian
Awaria serwera:
uniemożliwia wspólną pracę, zapisywanie zmian, przeglądanie historii, pobieranie projektu
może być przyczyną utraty wszystkich danych
Rozproszone systemy kontroli wersji
Wersjonowanie kodu
Pełna kontrola całego repozytorium
Zewnętrzny serwer nie jest wymagany
Awaria dowolnego komputera z repozytorium nie wpływa na pozostałych użytkowników
Odtworzenie repozytorium jest możliwe poprzez skopiowanie dowolnego innego repozytorium
Szybkie przeglądanie zmian i historii
Wersjonowanie kodu
vs
Porównanie CVS i GIT
GIT vs CVS
Wersjonowanie kodu
Rozproszony system kontroli wersji (DVCS) zamiast scentralizowanego (CVCS)
Odporny na błędy i awarie pojedynczego serwera
Szybsze działanie (zapisywanie zmian, przeglądanie historii)
Atomowe operacje
Lepszy model uwierzytelniania użytkowników
Coraz częściej wybierany, CVS nie jest rozwijany
Wsparcie refaktoringu
Webowe narzędzie do zarządzania repozytoriami (np. GitLab)
Elastyczna organizacja pracy w projekcie
Kilka protokołów dostępu (lokalny, SSH, HTTP(S), GIT)
Wersjonowanie kodu
Historia
Kto stworzył GITa
Historia
Wersjonowanie kodu
Twórca: Linus Torvalds
Narzędzie wspomagające rozwój Linuxa, który zastąpił BitKeepera
Pierwsze wydanie: 7 kwietnia 2005
Aktualna wersja: 1.8.2 - 13 marca 2013
Założenia:
szybkość i stabilność działania
rozproszenie pracy
nieliniowy rozwój kodu
integralność repozytorium
obsługa dużej ilości plików
Wersjonowanie kodu
Podstawy GITa
CVS – lista zmian
Wersjonowanie kodu
CVS
GIT – zestaw migawek
Wersjonowanie kodu
GIT
Stany, w jakich mogą znajdować się pliki
Wersjonowanie kodu
Dodatkowe informacje
Wersjonowanie kodu
Niemal każda operacja jest lokalna:
większość operacji wymaga jedynie dostępu do lokalnych plików
przeglądanie historii zmian z lokalnej bazy danych
Wbudowane mechanizmy spójności danych
zastosowanie SHA1 (40-znakowy łańcuch składający się z liczb szesnastkowych (0–9 oraz a–f), wyliczany na podstawie zawartości pliku lub struktury katalogu)
Brak możliwości zmiany pliku bez reakcji GIT
Standardowo Git wyłącznie dodaje nowe dane
w łatwe przywrócenie dowolnej wersji projektu
Wersjonowanie kodu
Praca na gałęziach
Co to jest gałąź
Gałęzie GITa
Wersjonowanie kodu
Gałąź GITa to prosty plik zawierający 40 znaków sumy kontrolnej SHA-1 zestawu zmian
Stworzenie nowej gałęzi nie powoduje skopiowania wszystkich plików projektu
Rozgałęzianie i scalanie #1
Wersjonowanie kodu
Na początek załóżmy, że pracujemy nad swoim projektem i mamy już zatwierdzonych kilka zestawów zmian
Rozgałęzianie i scalanie #2
Wersjonowanie kodu
Tworzymy nową gałąź dla nowej funkcjonalności (iss53)
Rozgałęzianie i scalanie #3
Wersjonowanie kodu
Mamy do wykonania poprawkę, tworzymy nową gałąź hotfix i dokonujemy zmiany
Rozgałęzianie i scalanie #4
Wersjonowanie kodu
Po połączeniu hotfix i master wskazują na ten sam commit (c4)
Rozgałęzianie i scalanie #5
Wersjonowanie kodu
Wracamy do gałęzi iss53 i dokonujemy kolejnych modyfikacji
Rozgałęzianie i scalanie #6
Wersjonowanie kodu
Gdy praca nad nową funkcjonalnością dobiegnie końca, możemy scalić zmiany z gałęzią master. GIT samodzielnie określa najlepszego wspólnego przodka jako punkt wyjściowy scalania
Wersjonowanie kodu
SeoSpace
Przejście z CVS na GITa
Wersjonowanie kodu
cd /home/serwer/www/seospace
find . -depth -name 'CVS' -exec rm -rf '{}' \; -print
find . -depth -name '.cvsignore' -exec rm -rf '{}' \; -print
git init
git add *
git commit -m 'init commit'
git remote add origin git@_serwer_git_:marek.misztal/seospace.git
git push -u origin master
Skrypt instalacyjny na produkcji
Wersjonowanie kodu
#!bin/bash
…
echo 'Pobranie SeoApi z GITa'
git archive --remote=git@_serwer_git_:marek.misztal/seoapi.git --format=tar --output=seoapi.tar master
if [ -e seoapi.tar ] ; then
tar -C ../public_html -xvf seoapi.tar
else
echo 'NIE UDAŁO SIĘ POBRAĆ SKRYPTU!!'
fi
Wersjonowanie kodu
Warto wiedzieć
Kto używa GITa?
Wersjonowanie kodu
Przydatne linki
Wersjonowanie kodu
http://git-scm.com/book/ - bardzo dobra dokumentacja, lista komend, tutoriale, również po polsku
http://rogerdudler.github.com/git-guide/ - GIT krok po kroku
https://help.ubuntu.com/community/Git - GIT w Ubuntu
https://code.google.com/p/msysgit/ - GIT w Windows
http://wiki.eclipse.org/EGit/User_Guide - dokumentacja wtyczki do Eclipse
Dziękuję za uwagę.