SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przyjemne rzeczy w Git:
rozproszony - zazwyczaj pracujemy lokalnie
szybki
mały
model branch’owania (branch i merge są banalne i sprawne)
(mnie jeszcze cieszy) brak folderów .svn
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przyjemne rzeczy w Git:
rozproszony - zazwyczaj pracujemy lokalnie
szybki
mały
model branch’owania (branch i merge są banalne i sprawne)
(mnie jeszcze cieszy) brak folderów .svn
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przyjemne rzeczy w Git:
rozproszony - zazwyczaj pracujemy lokalnie
szybki
mały
model branch’owania (branch i merge są banalne i sprawne)
(mnie jeszcze cieszy) brak folderów .svn
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przyjemne rzeczy w Git:
rozproszony - zazwyczaj pracujemy lokalnie
szybki
mały
model branch’owania (branch i merge są banalne i sprawne)
(mnie jeszcze cieszy) brak folderów .svn
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przyjemne rzeczy w Git:
rozproszony - zazwyczaj pracujemy lokalnie
szybki
mały
model branch’owania (branch i merge są banalne i sprawne)
(mnie jeszcze cieszy) brak folderów .svn
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przyjemne rzeczy w Git:
rozproszony - zazwyczaj pracujemy lokalnie
szybki
mały
model branch’owania (branch i merge są banalne i sprawne)
(mnie jeszcze cieszy) brak folderów .svn
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
W SVN repozytorium jest Bogiem...
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
W Git, źródła są w centrum uwagi!
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Typowy workflow:
SVN
svn commit -m ’moje super zmiany’
//cały świat widzi te zmiany
Git
//programowanie - coś zadziałało ’prawie’
git add . && git commit -m ’chyba jestem na dobrej drodze’
//tylko ja widze te zmiany - na razie, mogę je jeszcze cofnąć
//programowanie... udalo sie!
git add . && git commit -m ’naprawione’
git push
//caly swiat widzi te zmiany
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Release often, release early.
— Eric S. Raymond
a więc również...
Commit often, commit early!
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Git jest szybki bo pracuje lokalnie!
Jedyne komendy wymagające połączenia ze światem zewnętrznym
to pull oraz push.
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Lokalne
+
Szybkie
=
częstsze commity
=
mniej problemów typu ’ale przedtem działało...’
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Lokalne
+
Szybkie
=
częstsze commity
=
mniej problemów typu ’ale przedtem działało...’
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Lokalne
+
Szybkie
=
częstsze commity
=
mniej problemów typu ’ale przedtem działało...’
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Lokalne
+
Szybkie
=
częstsze commity
=
mniej problemów typu ’ale przedtem działało...’
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Porozmawiajmy o branch i merge!
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
W SVN nie branchuje się zbyt często - powód?
Bardzo nie przyjemny merge!
W Git, branch i merge to przyjemność i robisz to jak najczęściej!
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
’Prawdziwe’ branch+merge wygląda tak:
SVN trochę kłamie twierdząc że wspiera branche... W efekcie
zawsze jest to:
Merge robimy z tym commit, od którego nasz branch pochodzi -
pamiętacie?
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Tak zwany merge w SVN
» cd calc/trunk
» svn update
At revision 405.
» svn merge -r 341:HEAD
http://svn.example.com/repos/calc/branches/my-calc-branch
U integer.c
U button.c
U Makefile
» svn status
M integer.c
M button.c
M Makefile
// właściwe mergowanie oglądanie diffów, testowanie czy działa...
» svn commit -m "Merged my-calc-branch changes r341:405 into
the trunk."
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
’Prawdziwy’ merge w Git (master można rozumieć jako ’taki
trunk’):
Git
» git checkout master
// jakby zmiana ’brancha’...
» git merge mojBugfix
// jakby byly konflikty - diffy i rozwiązywanie ich
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Pozostałe ’zabawki’:
branch oraz merge - ’killer features’ Git’a
tag - tagowanie konkretnych miejsc w historii projektu
stash - ’taki schowek’ - schowa moje obecne zmiany, ale mogę
do nich wrócić.
.gitignore - prosty sposób ignorowania plików
rebase - do zmiany historii drzewa drzewka projektu (w
uproszczeniu). Uwaga, może być niebezpieczne.
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przykład tagowania:
Git
» git tag ’1.0.BETA’
» git push –tags
//dopiero teraz ten tag widzi cały świat
//listowanie tagów jest równie proste
» git tag
0.5
0.9
1.0.BETA
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Przykład stashowania:
Chcę zrobić pull, jednak pisałem coś już u siebie więc git zabroni
mi pull jeśli nie zrobię commit - czego mogę nie chcieć.
Git
» git pull
//ERROR, ponieważ mam lokalne, nie commitowane zmiany
» git stash
»git pull
//OK!
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Inny use-case, to jeżeli wiem że moje zmiany są ’do niczego’, stash
pozbędzie mi się ich natychmiast.
Listowanie obecnych stashy jest równie intuicyjne.
Git
» git stash list
stash@0: WIP on master: 18c8a19 Nowe ładne przyciski (na
licencji Public Domain)
stash@1: WIP on master: 5731b35 Merge branch ’master’ of
github.com:ktoso/TravelingSalesman-NBP
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
.gitignore to wygodny sposób (plik) na zmuszenie gita aby
ignorował pliki pasujące do pewnych wzorców, na przykład:
.gitignore
*
*.bak
*.tmp
*.class
dist/*
build
nbproject/private/platform-private.properties
*platform-private.properties
*nodes.xml
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Potencjalne przeszkody:
Przyzwyczajonym do SVN, może być z początku trudno się
przestawić
Najlepszy interface to command line - co nie każdemu może
odpowiadać. Warto dodać, że jest wyśmienity.
Dość nie wygodne korzystanie MS Windows — Chris
Aniszczyk (RedHat) i inni ciężko pracują nad JGit (Javowa
implementacja) jednak jeszcze nadal odstaje od natywnej
wersji.
Są ’pluginy’ do NetBeans, Eclipse (EGit) oraz Intellij – generalnie
jednak są nadal nie dojrzałe.
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Poradniki i filmiki:
Linus o SVN/CVS vs Git
http://www.youtube.com/watch?v=4XpnKHJAok8
Fantastyczne darmowe (dla open) repo http://github.com
Moja wideo-pomoc dla użytkowników windows
http://www.youtube.com/watch?v=evb1P6MYqTk
Fajny blog z trafnymi opisami który wczoraj znalazłem
http://hades.name/blog/
Porównanie z innymi SCM (skrzywiony punkt widzenia
troszke) http://whygitisbetterthanx.com/
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
Ogromne dzięki za uwagę!
kmalawski@project13.pl
www.github.com/ktoso
Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?

Weitere ähnliche Inhalte

Mehr von XSolve

Jak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksJak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksXSolve
 
How to Create an Agile Office
How to Create an Agile OfficeHow to Create an Agile Office
How to Create an Agile OfficeXSolve
 
Xlab #10: Integracja zewnętrznych API z wykorzystaniem platformy Spring
Xlab #10: Integracja zewnętrznych API z wykorzystaniem platformy SpringXlab #10: Integracja zewnętrznych API z wykorzystaniem platformy Spring
Xlab #10: Integracja zewnętrznych API z wykorzystaniem platformy SpringXSolve
 
How to build a Tesla car for the price of a Chevrolet
How to build a Tesla car for the price of a ChevroletHow to build a Tesla car for the price of a Chevrolet
How to build a Tesla car for the price of a ChevroletXSolve
 
xlab #8 - Architektura mikroserwisów na platformie Spring Boot
xlab #8 - Architektura mikroserwisów na platformie Spring Bootxlab #8 - Architektura mikroserwisów na platformie Spring Boot
xlab #8 - Architektura mikroserwisów na platformie Spring BootXSolve
 
xlab #7 - ReactJS & NodeJS
xlab #7 - ReactJS & NodeJSxlab #7 - ReactJS & NodeJS
xlab #7 - ReactJS & NodeJSXSolve
 
How to be agile at Agile Hack?! - agilehack.pl
How to be agile at Agile Hack?! - agilehack.plHow to be agile at Agile Hack?! - agilehack.pl
How to be agile at Agile Hack?! - agilehack.plXSolve
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolveXSolve
 
Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8XSolve
 
Xlab #2: wzorce projektowe
Xlab #2: wzorce projektoweXlab #2: wzorce projektowe
Xlab #2: wzorce projektoweXSolve
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryXSolve
 
Piątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPPiątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPXSolve
 
Grafowa baza danych i integracja z symfony
Grafowa baza danych  i integracja z symfonyGrafowa baza danych  i integracja z symfony
Grafowa baza danych i integracja z symfonyXSolve
 
How to outsource Scrum projects - a guide
How to outsource Scrum projects - a guideHow to outsource Scrum projects - a guide
How to outsource Scrum projects - a guideXSolve
 
Xsolve presentation - programming, bodyleasing, e-commerce
Xsolve presentation - programming, bodyleasing, e-commerceXsolve presentation - programming, bodyleasing, e-commerce
Xsolve presentation - programming, bodyleasing, e-commerceXSolve
 
Prezentacja firmy XSolve - programowanie, e-commerce, bodyleasing
Prezentacja firmy XSolve - programowanie, e-commerce, bodyleasingPrezentacja firmy XSolve - programowanie, e-commerce, bodyleasing
Prezentacja firmy XSolve - programowanie, e-commerce, bodyleasingXSolve
 
Programowanie zorientowane aspektowo
Programowanie zorientowane aspektowoProgramowanie zorientowane aspektowo
Programowanie zorientowane aspektowoXSolve
 
Agile estimating and planning
Agile estimating and planningAgile estimating and planning
Agile estimating and planningXSolve
 
Tailoring of PRINCE2
Tailoring of PRINCE2Tailoring of PRINCE2
Tailoring of PRINCE2XSolve
 
Mongo db baza danych zorientowana dokumentowo
Mongo db  baza danych zorientowana dokumentowo Mongo db  baza danych zorientowana dokumentowo
Mongo db baza danych zorientowana dokumentowo XSolve
 

Mehr von XSolve (20)

Jak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksJak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricks
 
How to Create an Agile Office
How to Create an Agile OfficeHow to Create an Agile Office
How to Create an Agile Office
 
Xlab #10: Integracja zewnętrznych API z wykorzystaniem platformy Spring
Xlab #10: Integracja zewnętrznych API z wykorzystaniem platformy SpringXlab #10: Integracja zewnętrznych API z wykorzystaniem platformy Spring
Xlab #10: Integracja zewnętrznych API z wykorzystaniem platformy Spring
 
How to build a Tesla car for the price of a Chevrolet
How to build a Tesla car for the price of a ChevroletHow to build a Tesla car for the price of a Chevrolet
How to build a Tesla car for the price of a Chevrolet
 
xlab #8 - Architektura mikroserwisów na platformie Spring Boot
xlab #8 - Architektura mikroserwisów na platformie Spring Bootxlab #8 - Architektura mikroserwisów na platformie Spring Boot
xlab #8 - Architektura mikroserwisów na platformie Spring Boot
 
xlab #7 - ReactJS & NodeJS
xlab #7 - ReactJS & NodeJSxlab #7 - ReactJS & NodeJS
xlab #7 - ReactJS & NodeJS
 
How to be agile at Agile Hack?! - agilehack.pl
How to be agile at Agile Hack?! - agilehack.plHow to be agile at Agile Hack?! - agilehack.pl
How to be agile at Agile Hack?! - agilehack.pl
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolve
 
Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8
 
Xlab #2: wzorce projektowe
Xlab #2: wzorce projektoweXlab #2: wzorce projektowe
Xlab #2: wzorce projektowe
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
 
Piątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPPiątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTP
 
Grafowa baza danych i integracja z symfony
Grafowa baza danych  i integracja z symfonyGrafowa baza danych  i integracja z symfony
Grafowa baza danych i integracja z symfony
 
How to outsource Scrum projects - a guide
How to outsource Scrum projects - a guideHow to outsource Scrum projects - a guide
How to outsource Scrum projects - a guide
 
Xsolve presentation - programming, bodyleasing, e-commerce
Xsolve presentation - programming, bodyleasing, e-commerceXsolve presentation - programming, bodyleasing, e-commerce
Xsolve presentation - programming, bodyleasing, e-commerce
 
Prezentacja firmy XSolve - programowanie, e-commerce, bodyleasing
Prezentacja firmy XSolve - programowanie, e-commerce, bodyleasingPrezentacja firmy XSolve - programowanie, e-commerce, bodyleasing
Prezentacja firmy XSolve - programowanie, e-commerce, bodyleasing
 
Programowanie zorientowane aspektowo
Programowanie zorientowane aspektowoProgramowanie zorientowane aspektowo
Programowanie zorientowane aspektowo
 
Agile estimating and planning
Agile estimating and planningAgile estimating and planning
Agile estimating and planning
 
Tailoring of PRINCE2
Tailoring of PRINCE2Tailoring of PRINCE2
Tailoring of PRINCE2
 
Mongo db baza danych zorientowana dokumentowo
Mongo db  baza danych zorientowana dokumentowo Mongo db  baza danych zorientowana dokumentowo
Mongo db baza danych zorientowana dokumentowo
 

Dlaczego git to nie svn oraz dlaczego to dobrze ?

  • 1. Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 2. Przyjemne rzeczy w Git: rozproszony - zazwyczaj pracujemy lokalnie szybki mały model branch’owania (branch i merge są banalne i sprawne) (mnie jeszcze cieszy) brak folderów .svn Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 3. Przyjemne rzeczy w Git: rozproszony - zazwyczaj pracujemy lokalnie szybki mały model branch’owania (branch i merge są banalne i sprawne) (mnie jeszcze cieszy) brak folderów .svn Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 4. Przyjemne rzeczy w Git: rozproszony - zazwyczaj pracujemy lokalnie szybki mały model branch’owania (branch i merge są banalne i sprawne) (mnie jeszcze cieszy) brak folderów .svn Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 5. Przyjemne rzeczy w Git: rozproszony - zazwyczaj pracujemy lokalnie szybki mały model branch’owania (branch i merge są banalne i sprawne) (mnie jeszcze cieszy) brak folderów .svn Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 6. Przyjemne rzeczy w Git: rozproszony - zazwyczaj pracujemy lokalnie szybki mały model branch’owania (branch i merge są banalne i sprawne) (mnie jeszcze cieszy) brak folderów .svn Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 7. Przyjemne rzeczy w Git: rozproszony - zazwyczaj pracujemy lokalnie szybki mały model branch’owania (branch i merge są banalne i sprawne) (mnie jeszcze cieszy) brak folderów .svn Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 8. W SVN repozytorium jest Bogiem... Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 9. W Git, źródła są w centrum uwagi! Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 10. Typowy workflow: SVN svn commit -m ’moje super zmiany’ //cały świat widzi te zmiany Git //programowanie - coś zadziałało ’prawie’ git add . && git commit -m ’chyba jestem na dobrej drodze’ //tylko ja widze te zmiany - na razie, mogę je jeszcze cofnąć //programowanie... udalo sie! git add . && git commit -m ’naprawione’ git push //caly swiat widzi te zmiany Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 11. Release often, release early. — Eric S. Raymond a więc również... Commit often, commit early! Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 12. Git jest szybki bo pracuje lokalnie! Jedyne komendy wymagające połączenia ze światem zewnętrznym to pull oraz push. Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 13. Lokalne + Szybkie = częstsze commity = mniej problemów typu ’ale przedtem działało...’ Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 14. Lokalne + Szybkie = częstsze commity = mniej problemów typu ’ale przedtem działało...’ Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 15. Lokalne + Szybkie = częstsze commity = mniej problemów typu ’ale przedtem działało...’ Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 16. Lokalne + Szybkie = częstsze commity = mniej problemów typu ’ale przedtem działało...’ Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 17. Porozmawiajmy o branch i merge! Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 18. W SVN nie branchuje się zbyt często - powód? Bardzo nie przyjemny merge! W Git, branch i merge to przyjemność i robisz to jak najczęściej! Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 19. ’Prawdziwe’ branch+merge wygląda tak: SVN trochę kłamie twierdząc że wspiera branche... W efekcie zawsze jest to: Merge robimy z tym commit, od którego nasz branch pochodzi - pamiętacie? Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 20. Tak zwany merge w SVN » cd calc/trunk » svn update At revision 405. » svn merge -r 341:HEAD http://svn.example.com/repos/calc/branches/my-calc-branch U integer.c U button.c U Makefile » svn status M integer.c M button.c M Makefile // właściwe mergowanie oglądanie diffów, testowanie czy działa... » svn commit -m "Merged my-calc-branch changes r341:405 into the trunk." Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 21. ’Prawdziwy’ merge w Git (master można rozumieć jako ’taki trunk’): Git » git checkout master // jakby zmiana ’brancha’... » git merge mojBugfix // jakby byly konflikty - diffy i rozwiązywanie ich Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 22. Pozostałe ’zabawki’: branch oraz merge - ’killer features’ Git’a tag - tagowanie konkretnych miejsc w historii projektu stash - ’taki schowek’ - schowa moje obecne zmiany, ale mogę do nich wrócić. .gitignore - prosty sposób ignorowania plików rebase - do zmiany historii drzewa drzewka projektu (w uproszczeniu). Uwaga, może być niebezpieczne. Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 23. Przykład tagowania: Git » git tag ’1.0.BETA’ » git push –tags //dopiero teraz ten tag widzi cały świat //listowanie tagów jest równie proste » git tag 0.5 0.9 1.0.BETA Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 24. Przykład stashowania: Chcę zrobić pull, jednak pisałem coś już u siebie więc git zabroni mi pull jeśli nie zrobię commit - czego mogę nie chcieć. Git » git pull //ERROR, ponieważ mam lokalne, nie commitowane zmiany » git stash »git pull //OK! Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 25. Inny use-case, to jeżeli wiem że moje zmiany są ’do niczego’, stash pozbędzie mi się ich natychmiast. Listowanie obecnych stashy jest równie intuicyjne. Git » git stash list stash@0: WIP on master: 18c8a19 Nowe ładne przyciski (na licencji Public Domain) stash@1: WIP on master: 5731b35 Merge branch ’master’ of github.com:ktoso/TravelingSalesman-NBP Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 26. .gitignore to wygodny sposób (plik) na zmuszenie gita aby ignorował pliki pasujące do pewnych wzorców, na przykład: .gitignore * *.bak *.tmp *.class dist/* build nbproject/private/platform-private.properties *platform-private.properties *nodes.xml Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 27. Potencjalne przeszkody: Przyzwyczajonym do SVN, może być z początku trudno się przestawić Najlepszy interface to command line - co nie każdemu może odpowiadać. Warto dodać, że jest wyśmienity. Dość nie wygodne korzystanie MS Windows — Chris Aniszczyk (RedHat) i inni ciężko pracują nad JGit (Javowa implementacja) jednak jeszcze nadal odstaje od natywnej wersji. Są ’pluginy’ do NetBeans, Eclipse (EGit) oraz Intellij – generalnie jednak są nadal nie dojrzałe. Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 28. Poradniki i filmiki: Linus o SVN/CVS vs Git http://www.youtube.com/watch?v=4XpnKHJAok8 Fantastyczne darmowe (dla open) repo http://github.com Moja wideo-pomoc dla użytkowników windows http://www.youtube.com/watch?v=evb1P6MYqTk Fajny blog z trafnymi opisami który wczoraj znalazłem http://hades.name/blog/ Porównanie z innymi SCM (skrzywiony punkt widzenia troszke) http://whygitisbetterthanx.com/ Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?
  • 29. Ogromne dzięki za uwagę! kmalawski@project13.pl www.github.com/ktoso Konrad “Ktoso“ Malawski - 9 Lipca 2010 @ XSolve Dlaczego Git to nie SVN? Oraz dlaczego to dobrze?