verzovani kodu s gitem (karel minarik)

161
Verzování kódu s Gitem Více než „zálohování a sdílení“ Karel Minařík

Upload: karel-minarik

Post on 20-Jan-2015

10.487 views

Category:

Technology


1 download

DESCRIPTION

Prezentace z přednášky o Gitu na Webexpo 2009. Objednejte si školení od jejího autora na http://git-fu.cz !

TRANSCRIPT

Page 1: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s GitemVíce než „zálohování a sdílení“

Karel Minařík

Page 2: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Karel Minařík

→ Web designer a vývojář na volné noze od roku 2000

→ V minulosti Flash vývojář, art director, informační architekt v internetové agentuře, ..., více na LinkedIn

→ (Opuštěný) blog o Ruby on Rails na http://blog.karmi.cz

→ http://github.com/karmi

→ karmi.cz

Page 3: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Vy a verzovací systémy1

Page 4: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Používáte verzovací systém?

Page 5: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ cp index.php index.php.BAK

$ cp -r . ../my_work.BAK

$ cp -r . ../my_work.BAK2

$ tar czf ../$(basename $PWD)-$(date '+%Y-%m-%d-%H-%M').tar.gz *

Page 6: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

www.webdesignerdepot.com/2009/03/intro-to-git-for-web-designers/

Page 7: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

‣ Git‣ Mercurial‣ Subversion‣ CVS‣ Jiný (Perforce, DARCS, RCS, ...)

Page 8: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Principy verzovacích systémů2

Page 9: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Version Control System, VCSSoftware Configuration Manager, SCM

Nástroj na archivaci a správu změn určitého typu obsahu (typicky software, ale též grafiky, textu, apod.)

Subversion, Wikipedia, Google Docs, Time Machine, …

Historie: SCCS (1970), RCS (1982), CVS (1986)…

Verzovací systémy obecněVERZOVACÍ SYSTÉMY

$ git clone git://git.kernel.org/pub/scm/git/git.git && git log ‐‐reverse ‐‐shortstat

commit e83c5163316f89bfbde7d9ab23ca2e25604af290Author: Linus Torvalds <[email protected]>Date:   Thu Apr 7 15:13:13 2005 ‐0700

    Initial revision of "git", the information manager from hell

 11 files changed, 1244 insertions(+), 0 deletions(‐)

Page 10: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Základní pojmyVERZOVACÍ SYSTÉMY

Repository (repositář)Úložiště obsahující historii a větve obsahu

Working copy (pracovní adresář)Adresář, kde pracujeme s obsahem repositáře

Mainline/Trunk/Master (hlavní větev)Hlavní větev

Head (head)Poslední revize (v dané větvi)

Revision/Version (revize, verze)Konkrétní záznam změny v určité části obsahu, resp. konkrétní stav obsahu v čase

Tag (štítek, tag)Konzistentní a smyslupné označení určité revize

Branch (větev)Paralelní a nezávislá varianta obsahu

Merge (sloučit)Sloučení několika variant obsahu

Commit (odevzdat, commit)Uložení určité revize obsahu do repositáře (včetně autorství, data a popisu/komentáře)

Page 11: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Základní workflowVERZOVACÍ SYSTÉMY

Working copy Commit Repository

Page 12: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

K čemu je nám dobrý verzovací systémVERZOVACÍ SYSTÉMY

Zálohování a obnovení ze zálohyPotřebuji mít obsah bezpečně uložený mimo svůj počítač. Potřebuji mít možnost se k určité verzi obsahu snadno vrátit.

Sdílení, synchronizacePotřebuji sdílet obsah s někým jiným po síti. Potřebuji řízeně synchronizovat změny, které učiním já, se změnami, které učiní ostatní.

„Undo na kofeinu“Potřebuji rychle odstranit (některé) změny v (části) obsahu (a jiné zachovat). Potřebuji si exportovat historickou verzi obsahu.

Nelineární, paralelní vývojPotřebuji snadno vyzkoušet nějaké řešení „stranou“, bez toho, že bych nevratně ovlivnil historii obsahu. Potřebuji udržovat paralelní stav obsahu, ale mít možnost do každého zasáhnout a částečně je slučovat.

Zkoumání historie obsahuPotřebuji si prohlédnout, jakými změnami prošel obsah nebo jeho část. Potřebuji zobrazit rozdíl mezi aktuální a historickou podobou části obsahu. Potřebuji vědět, kdo provedl konkrétní změnu v obsahu a proč.

DeploymentPotřebuji snadno aktualizovat webovou aplikaci na specifickou novou verzi. Potřebuji udržovat přehled o vydaných verzích knihovny, aplikace. Potřebuji opravit chybu v určité verzi aplikace a řízeně ji začlenit také do verzí novějších.

Page 13: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

deltastorage

file A !1

file B

file C

C1 C2 C3 C4 C5

!2

!1 !2

!1 !2 !3

A

B

C

C1 C2 C3 C4 C5

A1

B

C1

A1

B

C2

A2

B1

C2

A2

B2

C3

DAGstorage

Taxonomie (delta vs. snapshot)VERZOVACÍ SYSTÉMY

http://www.slideshare.net/chacon/getting-git/56

Scott Chacon, Getting Git (RailsConf 2008)

Page 14: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Taxonomie (delta/snapshot, local/centralized/distributed)

VERZOVACÍ SYSTÉMY

Scott Chacon, Getting Git (RailsConf 2008)

svncvs

git

perforce

mercurial

time machinecp -r

rcs

source control taxonomy

darcs

deltastorage

DAGstorage

bazzar

bitkeeper

local

centralized

distributed

local

centralized

distributed

http://www.slideshare.net/chacon/getting-git/67

Page 15: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Subversion (poprvé a naposledy :)

VERZOVACÍ SYSTÉMY

Subversion: „CVS done right“

„There is no way to do CVS right“(Linus Torvalds, Google Tech Talks)

Git není „lepší Subversion“(Přestože ho jako Subversion můžeme úspěšně používat)

Page 16: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Přístup ke GituCO JE GIT?

Git je extrémně flexibilní

Git je způsob práce

1

2

Page 17: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Co je Git?3

Page 18: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git — stupid content tracker

Page 19: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

git(1) Manual PageNAMEgit - the stupid content tracker

SYNOPSISgit [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

Page 20: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

git(1) Manual PageNAMEgit - the stupid content trackerSYNOPSIS

Page 21: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Page 22: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Me personally, I want to have something that is very repeatable and non-clever. Something I understand or tells me that it can't do it.

Re: Merge with git-pasky II.From: Linus Torvalds <[email protected]> Date: 2005-04-27 06:58:44

Page 23: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Non-clever

Page 24: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Základní vlastnostiCO JE GIT?

Jednoduchost

Rychlost

Flexibilita

Snapshot-based

Distribuovanost, nezávislost na centrálním repositáři

Rozmanité workflow

Silná podpora nelineárního vývoje (branch & merge)

Interaktivní příprava revizí a editace historie

Vynikající dokumentace a komunita

Page 25: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Kdo používá GitCO JE GIT?

Page 26: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

http://whygitisbetterthanx.comhttp://whygitisbetterthanx.karmi.cz

Page 27: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

www.git-scm.com

Page 28: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

book.git-scm.com

Page 29: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

www.progit.org/book

Page 30: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

www.gitcasts.com/posts/railsconf-git-talk

Dokumentace a komunitaCO JE GIT?

Page 31: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

www.kernel.org/pub/software/scm/git/docs/user-manual.html

Page 32: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

www.newartisans.com/2008/04/git-from-the-bottom-up.html

Page 33: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

www.stackoverflow.com/questions/tagged/git

Page 34: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaCO JE GIT?

www.stackoverflow.com/questions/tagged/git

Page 35: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaGIT

www.stackoverflow.com/questions/tagged/git

Page 36: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaGIT

www.stackoverflow.com/questions/tagged/git

Page 37: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokumentace a komunitaGIT

www.stackoverflow.com/questions/tagged/git

Page 38: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git je jednoduchý4

Page 39: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

InstalaceCO JE GIT?

$ apt-get install git-core$ sudo port install git-core +svn +doc +bash_completion +gitweb

An Illustrated Guide to Git on Windows,http://nathanj.github.com/gitguide/tour.html

Page 40: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Integrace s IDECO JE GIT?

Page 41: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

GUI nebo CLI?CO JE GIT?

Page 42: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Nastavení identity uživateleCO JE GIT?

$ git config ‐‐global user.name  "Josef Novák"$ git config ‐‐global user.email "[email protected]"

Page 43: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Nastavení identity uživateleCO JE GIT?

$ cat ~/.gitconfig [user] name = Josef Novák email = [email protected]

Page 44: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git je stupidníCO JE GIT?

$ cat ~/.gitconfig [user] name = Josef Novák email = [email protected]

Git je stupidní

Content‐Type: text/plain

Page 45: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Jak Git ukládá obsah?CO JE GIT?

Git ukládá čtyři typy objektů:

‣ Blob Ukládá data (obsah souborů)

‣ Tree Ukládá obsah složek jako reference na ostatní trees a blobs

‣ Commit Ukládá referenci na určitý tree spolu s metadaty (autor, čas, předek, atd.)

‣ Tag Ukládá referenci na určitý commit spolu s metadaty (název, autor, atd.)

Page 46: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Jak Git ukládá obsah?CO JE GIT?

01__hello_world_git.sh

$ mkdir newrepo$ cd newrepo

$ git init

$ echo "Hello, World" > file.txt$ cat file.txt

$ git status

$ git add file.txt

$ git status

$ git commit ‐m "Initial commit"

$ git log ‐‐stat

Replay

Page 47: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Jak Git ukládá obsah?CO JE GIT?

$ find .git/objects -type f

.git/objects/38/bca7264fc8b8340b560e19de3c780ae0a4b60d

.git/objects/3f/a0d4b98289a95a7cd3a45c9545e622718f8d2b

.git/objects/76/bf39ab0db46b183b49d9f707d86e580f78e932

.git/objects/7d/18cb53260cd51497cd70ed8cc00ce8094be681

Page 48: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Jak Git ukládá obsah?CO JE GIT?

Commit38bca7...

tree 76bf39...

parent N/A

author Karel ...

message Initial commit

Blob3fa0d4...

Hello, World

Tree76bf39...

blob 3fa0d4... file.txt

Tag7d18cb...

object 38bca7...

type commit

tag v.0.1

tagger Karel ...

.git/objects/38/bca7264fc8b8340b560e19de3c780ae0a4b60d

.git/objects/7d/18cb53260cd51497cd70ed8cc00ce8094be681

.git/objects/3f/a0d4b98289a95a7cd3a45c9545e622718f8d2b

.git/objects/76/bf39ab0db46b183b49d9f707d86e580f78e932

Page 49: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Jak Git ukládá obsah?CO JE GIT?

Commit38bca7...

tree 3fa0d4...

parent N/A

author Karel ...

message Initial commit

Blob3fa0d4...

Hello, World

Tree76bf39...

blob 3fa0d4... file.txt

Tag7d18cb...

object 38bca7...

type commit

tag v.0.1

tagger Karel ...

Commit799659...

tree ae2593...

parent 3fa0d4...

author Karel ...

message Adding somefile

Treeae2593...

blob 3fa0d4... file.txtblob a4ebe0... other_file.txt

Bloba4ebe0...

Lorem ipsum dolor1

2

Page 50: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Základní workflow

Page 51: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zřízení repositářeZÁKLADNÍ WORKFLOW

$ cd my/project/directory$ git init

$ mkdir new_project.git$ cd new_project.git$ git init ‐‐bare ‐‐shared=true

Page 52: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zřízení repositářeZÁKLADNÍ WORKFLOW

$ git1_6_5 init new_project.git

http://git.kernel.org/?p=git/git.git;a=commit;h=53d48885931614a43e414e1272a7f126f8d0c901

Page 53: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Připravení obsahu ke commituZÁKLADNÍ WORKFLOW

$ git status# On branch master## Initial commit## Untracked files:#   (use "git add <file>..." to include in what will be committed)##  somefile.txtnothing added to commit but untracked files present (use "git add" to track)

Page 54: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Připravení obsahu ke commituZÁKLADNÍ WORKFLOW

$ git add somefolder$ git add somefile.txt$ git add .

Page 55: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Připravení obsahu ke commituZÁKLADNÍ WORKFLOW

$ git status# On branch master## Initial commit## Changes to be committed:#   (use "git rm ‐‐cached <file>..." to unstage)##  new file:   somefile.txt

Page 56: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Připravení obsahu ke commituZÁKLADNÍ WORKFLOW

$ git rm some_folder/not_this_file.txt ‐‐cached

Page 57: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Označení obsahu, který nechceme verzovatZÁKLADNÍ WORKFLOW

$ cat .gitignore

config/database.ini       # Neverzuj soubor "database.ini" ve složce "config"log/*.log                 # Neverzuj soubory s příponou "log" ve složce "log"tmp/**/*                  # Neverzuj žádné soubory a složky ve složce "tmp"!/tmp/special.txt         # VERZUJ soubor "special.txt" ve složce "tmp"

Page 58: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Uložení připravené revize do repositáře (commit)ZÁKLADNÍ WORKFLOW

$ git commit ‐m "Initial commit"[master (root‐commit) 826e622] Initial commit 0 files changed, 0 insertions(+), 0 deletions(‐) create mode 100644 somefile.txt

Page 59: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Uložení připravené revize do repositáře (commit)ZÁKLADNÍ WORKFLOW

$ git add$ git commit

Page 60: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Staging area (index)

Page 61: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://github.com/schacon/git-presentations/raw/master/sor09/GitTalk-SOR09.pdf

Scott Chacon, Getting Git (Scotland On Rails 2009), p. 197

Staging area (index)ZÁKLADNÍ WORKFLOW

Page 62: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Staging area (index)ZÁKLADNÍ WORKFLOW

$ echo "Hello, world" > file.txt && cat ‐n file.txt$ git add file.txt && git commit ‐m "Initial commit"

$ git status

$ echo "Goodbye, world" > file.txt && cat ‐n file.txt

$ git add file.txt && git status

$ echo "How are you?" >> file.txt && cat ‐n file.txt

$ git status

$ git diff

$ git diff ‐‐staged

Replay

02__staging_area.sh

Page 63: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Prohlížení historie5

Page 64: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Prohlížení historieZÁKLADNÍ WORKFLOW

$ git log$ git log ‐‐oneline app/models/article.rb$ git log ‐‐stat$ git log ‐‐pretty=format:'%h | %ar | %an | %s'$ git log ‐1$ git log ‐‐author=karmi

$ git log ‐‐grep=configuration app/views$ git log ‐Smetal

$ git log ‐‐oneline v.0.1..master

http://www.kernel.org/pub/software/scm/git/docs/git-log.html

Page 65: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Prohlížení historieZÁKLADNÍ WORKFLOW

$ git show dea2a023c6cf1cac1a21ce48b7154d27ee097a0f$ git show dea2a02$ git show dea2a02:app/models/article.rb

http://www.kernel.org/pub/software/scm/git/docs/git-show.html

Page 66: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

ZÁKLADNÍ WORKFLOW

Prohlížení historie

$ git blame file.txt ^2b9afb5 (Karel Minarik 2009‐10‐06 15:40:31 +0200 1) Hello, Worldf0ff2521 (Karel Minarik 2009‐10‐06 18:01:07 +0200 2) How are you?

http://www.kernel.org/pub/software/scm/git/docs/git-blame.html

Page 67: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Prohlížení a porovnávání revizíZÁKLADNÍ WORKFLOW

$ git diff dea2a02$ git diff dea2a02 facab9e$ git diff dea2a02 app/views$ git diff v.0.1$ git diff HEAD^$ git diff master~5

http://www.kernel.org/pub/software/scm/git/docs/git-diff.html

Page 68: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Identifikace revizí (commitů, snapshotů)ZÁKLADNÍ WORKFLOW

http://www.slideshare.net/chacon/getting-git/230

SHA1 e82162cfcdd09f868351a6f789942afd184b0619

Zkrácené SHA1 e82162c

Název branche master, origin/susan

Tag v.0.1

„Symref“ HEAD, ORIG_HEAD, atd

Relativní určení master^, master^^, master~5

Rozsah 36b058d..da2a2e7

Page 69: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Práce s historií a „undo“6

Page 70: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ git add app/$ git commit ‐m "Přidáno připojení k webservice"

$ git status# Untracked files:#  config/webservice.ini

$ git add config/webservice.ini

$ git commit ‐‐amend

Oprava předešlého commituZÁKLADNÍ WORKFLOW

Oops!

Page 71: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Neměnte publikovanou, veřejnou historiiZÁKLADNÍ WORKFLOW

ˇ

$ git push origin master$ git merge hotfix

Page 72: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zrušení všech úprav v souboruZÁKLADNÍ WORKFLOW

$ git status# Changed but not updated:#   (use "git add <file>..." to update what will be committed)#   (use "git checkout ‐‐ <file>..." to discard changes in working directory)#  modified:   file.txt

$ git checkout file.txt

Page 73: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zrušení všech úprav v souboruZÁKLADNÍ WORKFLOW

Git si dává velký pozor, abyste nepřišli o dataAle pouze u obsahu, který už je v repositáři

Page 74: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ git log ‐‐onelined427f2a Changee82162c Initial commit

$ git checkout e82162cNote: moving to 'e82162c' which isn't a local branchIf you want to create a new branch from this checkout, you may do so(now or later) by using ‐b with the checkout command again. Example:  git checkout ‐b <new_branch_name>HEAD is now at e82162c... Initial commit

$ git branch* (no branch)  master

$ git checkout ‐b historye82162c Initial commit

$ git checkout master

Checkout historické verze celého projektuZÁKLADNÍ WORKFLOW

master^, v.0.1, origin/susan, atd

Page 75: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Návrat „o krok zpět“POKROČILÉ WORKFLOW

$ git log ‐‐onelined427f2a Changee82162c Initial commit

$ git reset HEAD^ ‐‐hardHEAD is now at e82162c Initial commit

Page 76: Verzovani kodu s Gitem (Karel Minarik)

$ git log ‐‐onelinee82162c Initial commit

Page 77: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Návrat „zase zpátky“POKROČILÉ WORKFLOW

$ git reset HEAD^ ‐‐hardHEAD is now at e82162c Initial commit

$ git log ‐‐onelinee82162c Initial commit

$ cat .git/ORIG_HEADd427f2a0ec416986645d6e797963711eea90c6a

$ git reflog2b9afb5 HEAD@{0}: HEAD^: updating HEADd427f2a HEAD@{1}: commit: Change

$ git reset d427f2a ‐‐hardHEAD is now at d427f2a Change

Page 78: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ git rebase ‐‐interactive

Page 79: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Sdílení repositáře a synchronizace7

Page 80: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zřízení sdíleného repositářeSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ ssh example.com

[email protected]: cd /path/to/git/repos

[email protected]: mkdir new_repository.git

[email protected]: $ git init ‐‐bare ‐‐shared=true

Page 81: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zřízení lokální kopie sdíleného repositářeSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ cd /path/to/local/projects

# Pokud inicializujeme projekt od nuly

$ git clone [email protected]:/path/to/git/repos/new_repository.git$ git clone [email protected]:/path/to/git/repos/new_repository.git my_project

# Pokud již máme repositář lokálně zřízený

$ cd my_project$ git remote add origin [email protected]:/path/to/git/repos/new_repository.git

Page 82: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Konfigurace vzdáleného repositářeSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ git remote show origin* remote origin  Fetch URL: [email protected]:/path/to/git/repos/new_repository.git  Push  URL: [email protected]:/path/to/git/repos/new_repository.git  HEAD branch: (unknown)

Page 83: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Konfigurace vzdáleného repositářeSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ cat .git/config# ...[remote "origin"]  fetch = +refs/heads/*:refs/remotes/origin/*  url = [email protected]:/path/to/git/repos/new_repository.git[branch "master"]  remote = origin  merge = refs/heads/master

Page 84: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zřízení lokální kopie sdíleného repositářeSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ git push origin masterCounting objects: 9, done.Delta compression using up to 2 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (9/9), 691 bytes, done.Total 9 (delta 0), reused 0 (delta 0)To [email protected]:/path/to/git/repos/new_repository.git * [new branch]      master ‐> master

Page 85: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Zřízení lokální kopie sdíleného repositářeSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ git pull origin masterremote: Counting objects: 9, done.remote: Compressing objects: 100% (3/3), done.remote: Total 9 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (9/9), done.From [email protected]:/path/to/git/repos/new_repository.git * branch            master     ‐> FETCH_HEAD

Page 86: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Základní workflow sdílení a synchronizaceSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ ssh [email protected] '(cd /repos/ && mkdir new_repo.git && cd new_repo.git && git init ‐‐bare ‐‐shared=true)'

$ cd existing_project

$ git remote add origin [email protected]:/repos/new_repo.git

$ git remote show origin

$ cat .git/config

$ git push origin master

Replay

03__sharing_repositories.sh

Page 87: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Synchronizace repositářůSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

$ git log ‐‐oneline ‐‐graph

*   9945945 Susan: Merge branch 'master' of example.com:/repos/new_repo|\  | * 2360c70 Josh: Small syntax tweaks* | 20c1c8f Susan: Removing trailing dot|/  * d587971 Susan: Adding configuration* 4e4a91f Josh: Change* f0ff252 Josh: Change* 2b9afb5 Josh: Initial commit

Page 88: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Synchronizace repositářůSDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE

Page 89: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git je distribuovaný8

Page 90: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Taxonomie (delta/snapshot, local/centralized/distributed)

VERZOVACÍ SYSTÉMY

Scott Chacon, Getting Git (RailsConf 2008)

svncvs

git

perforce

mercurial

time machinecp -r

rcs

source control taxonomy

darcs

deltastorage

DAGstorage

bazzar

bitkeeper

local

centralized

distributed

local

centralized

distributed

http://www.slideshare.net/chacon/getting-git/67

Page 91: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Co znamená, že Git je „distribuovaný“GIT JE DISTRIBUOVANÝ

Lokální operace — nezávislost na připojení k síti

Neexistuje koncept „centrálního repositáře“, „hlavní kopie“. Radikální důsledky pro zálohování. Neexistuje „jedno zranitelné místo”.

Peer-to-peer vs server-client. Radikální důsledky pro výkon a škálování.

Každý repositář je rovnocennou a plnohodnotnou kopií. Včetně celé historie, veřejných větví, atd. Může kdykoliv nahradit jakýkoliv jiný.

Netradiční workflow pro sdílení a synchronizaci

Usnadnění forkingu; udržování vlastní varianty obsahu propojené s původním repositářem

Robustní podpora paralelního vývoje v oddělených větvích

Page 92: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Co znamená, že Git je „distribuovaný“GIT JE DISTRIBUOVANÝ

As you may have heard, coding superhero _why the lucky stiff recently deleted all his repos, took down his domains and completely removed his online presence.

(...) It's important, however, that his wonderful code live on, and we need your help to do so.

http://whymirror.github.com

Page 93: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Co znamená, že Git je „distribuovaný“GIT JE DISTRIBUOVANÝ

Workflows!

http://www.slideshare.net/chacon/getting-git/474

Page 94: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 95: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 96: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

Krycí jméno:

„Jako v Subversion“

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 97: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

git clone

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 98: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

git push

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 99: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

git push

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 100: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

git push

Page 101: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

git fetch && git mergegit pull

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 102: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

git push

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 103: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 104: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 105: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 106: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

git clone

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 107: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

git fetch && git merge

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 108: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

git fetch && git merge

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 109: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

git fetch && git merge

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 110: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

git push

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 111: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerdeveloper

dictator

developer

lieutenant

blessed repository

developer

lieutenant

git fetch

Generál a pobočníciMOŽNOSTI WORKFLOW S GITEM

Page 112: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 113: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 114: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

github.com/schacon/ticgit

/yob/ticgit /pope/ticgit

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 115: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

github.com/schacon/ticgit

/yob/ticgit /pope/ticgit

KoordinátorMOŽNOSTI WORKFLOW S GITEM

„forks“

Page 116: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

git push

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 117: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

git clone

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 118: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

git push

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 119: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

git fetch && git merge

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 120: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

git push

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 121: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

git fetch && git rebase / merge

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 122: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developerpublic

developerpublic

integration manager

blessedrepository

developerprivate

developerprivate

git push

KoordinátorMOŽNOSTI WORKFLOW S GITEM

Page 123: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git podporuje paralelní vývoj9

Page 124: Verzovani kodu s Gitem (Karel Minarik)

„Softwarové inženýrství“

Page 125: Verzovani kodu s Gitem (Karel Minarik)

„Softwarové inženýrství“No nevim.

Page 126: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

K čemu jsou nám užitečné větve (branches)BRANCH & MERGE

In the ideal world, there are no bugs, no schedule crunches, no personnel changes, no market shis, and no technology revolutions. Soware in the ideal world is simply developed and released. (...) If there were such an ideal world, we probably wouldn’t need an SCM system.

Laura Wingerd, Practical Perforce (O’Reilly, 2005)

http://oreilly.com/catalog/practicalperforce/chapter/ch07.pdf

Page 127: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

„Klasický scénář“BRANCH & MERGE

Uprostřed práce na rozsáhlém úkolu přijde požadavek na změnu v produkční verzi kódu (hotfix)

Page 128: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ find .git/refs/heads ‐type f.git/refs/heads/master

$ cat .git/refs/heads/master 87c93da440b099856fe3437c5bb269f01fb95379

Co je v Gitu branch?BRANCH & MERGE

40 písmenek v refs/heads

Page 129: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

(...) the git behavior explicitly encourages you to not have to decide before-the-fact to create a branch – it may be that only aer you've done the changes do you realize that „oops, these changes were way more intrusive than I originally anticipated, and I don't want to commit them on the master branch, I want to commit them on an experimental topic branch instead“

— Linus Torvalds

Git a branch workflowBRANCH & MERGE

http://thread.gmane.org/gmane.comp.version-control.git/126568/focus=126571

Page 130: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

1

Page 131: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

2

$ git checkout ‐b iss53

Page 132: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

3

$ git commit ‐m "Pridan formular pro zmenu hesla uzivatele"

Page 133: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

4

$ git checkout ‐b hotfix$ git commit ‐m "Oprava registracniho formulare na homepage"

Page 134: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

5

$ git checkout master$ git merge hotfix$ git branch ‐d hotfix

Page 135: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

6

$ git commit ‐m "Dokonceni formulare na zmenu hesla"

Page 136: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

7

$ git checkout master$ git merge iss53  Merge made by recursive.

Page 137: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitemhttp://progit.org/book/ch3-2.html

Základní workflowBRANCH & MERGE

8

$ git checkout master$ git merge iss53  Merge made by recursive.

Page 138: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

„This probably would look better if we had just used git‐rebase to transplant the commits instead of merging them, but at the time the user who created these was still quite new to Git…“

„Merge hell“BRANCH & MERGE

http://www.spearce.org/2007/07/difficult-gitk-graphs.html

Page 139: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

Krycí jméno:

„Jako v Subversion“

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 140: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

git push

Page 141: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

developer

shared repository

developer developer

git fetch && git mergegit pull

Centralizované worflowMOŽNOSTI WORKFLOW S GITEM

Page 142: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ git pull origin master

$ git checkout ‐b task‐999$ git commit ‐m "Dokonceni registrace uzivatele [closes #999]"

$ git checkout master$ git pull

$ git checkout task‐999$ git rebase master

$ git checkout master$ git merge task‐999

$ git push origin master

$ git branch ‐d task‐999

Příklad workflow s rebase: topic branchBRANCH & MERGE

Page 143: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

RebaseBRANCH & MERGE

http://progit.org/book/ch3-6.html

$ git merge experiment

$ git rebase master $ git merge experiment

Page 144: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ git branch ‐‐merged$ git branch ‐‐no‐merged

$ git branch ‐d branch_name # Smazat branch, pokud je merged$ git branch ‐D branch_name # Smazat branch, i pokud není merged$ git push origin +:temp    # Smazat remote branch

$ git log branch1..branch2$ git log branch2..branch1

$ git log master..origin/master  # upstream$ git log origin/master...master # pending

$ git config ‐‐global alias.upstream "log ‐‐oneline master..origin/master"

Rozdíly mezi větvemi, mazání větvíBRANCH & MERGE

Page 145: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git je flexibilní10

Page 146: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Přechod ze SVN na Git u nových projektů

Jednorázový import projektu ze SVN do Gitu

Import projektu ze SVN do Gitu a posílání změn z Gitu

http://git.or.cz/course/svn.htmlhttp://gitready.com/beginner/2009/02/04/converting-from-svn.htmlhttp://www.kernel.org/pub/software/scm/git/docs/git-svn.html

Integrace se SubversionGIT JE FLEXIBILNÍ

$ git svn init ‐s http://example.com/svn/my_proj$ git svn fetch$ git svn rebase$ git svn dcommit

Page 147: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ cat ~/.gitconfig[user] name = Josef Novák...[alias]  s = status  co = commit  ca = commit ‐a

 l = log ‐‐pretty=format:'%Cred%h%Creset | %Cgreen%s%Creset       [%ar by %an]' b = branch

  upstream = log ‐‐oneline master..origin/master[merge]

 tool=vimdiff

Konfigurace, aliasyGIT JE FLEXIBILNÍ

Page 148: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Interaktivní příprava commituGIT JE FLEXIBILNÍ

$ git add ‐p

Page 149: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Interaktivní příprava commituGIT JE FLEXIBILNÍ

Page 150: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Interaktivní rebaseGIT JE FLEXIBILNÍ

$ git rebase ‐‐interactive 01df473^

Oprava commitů v historiiSloučení více commitů do jednohoOdstranění commitů

Page 151: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ git filter-branch -f --index-filter 'git update-index --remove passwords.txt' HEAD

$ git filter-branch --env-filter ' if [ "$GIT_AUTHOR_EMAIL" = "root@localhost" ]; then export GIT_AUTHOR_NAME="Lubomír Roztržitý" \ && export GIT_AUTHOR_EMAIL="[email protected]"; fi' -f

Surový přepis historie repositářeGIT JE FLEXIBILNÍ

Page 152: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

HooksGIT JE FLEXIBILNÍ

$ cat repo.git/hooks/post‐receive#!/bin/sh(unset GIT_DIR && \ cd ../deployed_repo && \ git fetch && \ git reset ‐‐hard origin/master && \ echo ">>> Content has been synchronized")

$ find .git/hooks ‐type f.git/hooks/applypatch‐msg.sample.git/hooks/commit‐msg.sample.git/hooks/post‐commit.sample.git/hooks/post‐receive.sample.git/hooks/post‐update.sample.git/hooks/pre‐applypatch.sample.git/hooks/pre‐commit.sample.git/hooks/pre‐rebase.sample.git/hooks/prepare‐commit‐msg.sample.git/hooks/update.sample

Page 153: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

$ cd repos/webexpo_planner_with_error

$ git bisect start HEAD v1.0$ git bisect run rake test

Binary bug searchGIT JE FLEXIBILNÍ

Bad Good

Page 154: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Dokument Microsoft Word

diff ‐‐git a/document1.doc b/document1.docindex dfe0545..ff0d2d6 100644Binary files a/document1.doc and b/document1.doc differ

$ echo '*.doc diff=doc' >> .gitattributes$ git config diff.doc.textconv antiword

$ git log ‐‐oneline ‐p$ git log ‐‐oneline ‐p ‐‐color‐words

Speciální diff nástrojGIT JE FLEXIBILNÍ

Page 155: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git jako toolkitGIT JE FLEXIBILNÍ

http://ephemera.karmi.cz/post/173776746/post-scriptum-k-setkani-na-tema-verzovaci-systemy

Page 156: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

➡ Hooks

➡ Capistrano (www.capify.org)

➡ Continuous Integration server

DeploymentGIT JE FLEXIBILNÍ

Page 157: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Git hosting11

Page 158: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

MožnostiGIT HOSTING

1

2

3

$ ssh my‐box‐somewhere‐on‐the.net

Page 159: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Github.comGIT HOSTING

„Facebook“

Fork queue

Downloads

Networkgist.github.com

Page 160: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Githosting.czGIT HOSTING

Aktivita v repositářích

Prohlížeč obsahu

repositáře

Prohlížeč historie

Dashboard

Githosting vs Github: Více repositářů | Méně funkcí | Umístění v ČR | Česká fakturace a podpora

Page 161: Verzovani kodu s Gitem (Karel Minarik)

Verzování kódu s Gitem

Listopad/Prosinec 2009GIT ŠKOLENÍ

www.git-fu.cz