1. Verzování kódu s Gitem
Více než „zálohování a sdílení“
Karel Minařík
2. 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 nahttp://blog.karmi.cz
→ http://github.com/karmi
→ karmi.cz
Verzování kódu s Gitem
3. 1 Vy a verzovací systémy
Verzování kódu s Gitem
7. ‣ Git
‣ Mercurial
‣ Subversion
‣ CVS
‣ Jiný (Perforce, DARCS, RCS, ...)
Verzování kódu s Gitem
8. 2 Principy verzovacích systémů
Verzování kódu s Gitem
9. VERZOVACÍ SYSTÉMY
Verzovací systémy obecně
Version Control System, VCS
Software 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)…
$ git clone git://git.kernel.org/pub/scm/git/git.git && git log ‐‐reverse ‐‐shortstat
commit e83c5163316f89bfbde7d9ab23ca2e25604af290
Author: Linus Torvalds <torvalds@ppc970.osdl.org>
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(‐)
Verzování kódu s Gitem
10. VERZOVACÍ SYSTÉMY
Základní pojmy
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)
Verzování kódu s Gitem
12. VERZOVACÍ SYSTÉMY
K čemu je nám dobrý verzovací systém
Zálohování a obnovení ze zálohy
Potř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í, synchronizace
Potř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ývoj
Potř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 obsahu
Potř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č.
Deployment
Potř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.
Verzování kódu s Gitem
13. VERZOVACÍ SYSTÉMY
Taxonomie (delta vs. snapshot)
C1 C2 C3 C4 C5
file A !1 !2
delta
storage
file B !1 !2
file C !1 !2 !3
C1 C2 C3 C4 C5
DAG A A1 A1 A2 A2
storage
B B B B1 B2
C C1 C2 C2 C3
Scott Chacon, Getting Git (RailsConf 2008)
http://www.slideshare.net/chacon/getting-git/56 Verzování kódu s Gitem
14. VERZOVACÍ SYSTÉMY
Taxonomie (delta/snapshot, local/centralized/distributed)
source control taxonomy
local rcs
delta
centralized cvs svn perforce
storage
distributed darcs mercurial
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
distributed git bazzar
Scott Chacon, Getting Git (RailsConf 2008)
http://www.slideshare.net/chacon/getting-git/67 Verzování kódu s Gitem
15. VERZOVACÍ SYSTÉMY
Subversion (poprvé a naposledy :)
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)
Verzování kódu s Gitem
16. CO JE GIT?
Přístup ke Gitu
1 Git je extrémně flexibilní
2 Git je způsob práce
Verzování kódu s Gitem
22. Re: Merge with git-pasky II.
From: Linus Torvalds <torvalds@osdl.org>
Date: 2005-04-27 06:58:44
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.
Verzování kódu s Gitem
24. CO JE GIT?
Základní vlastnosti
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
Verzování kódu s Gitem
39. CO JE GIT?
Instalace
$ 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
Verzování kódu s Gitem
42. CO JE GIT?
Nastavení identity uživatele
$ git config ‐‐global user.name "Josef Novák"
$ git config ‐‐global user.email "jnovak@example.com"
Verzování kódu s Gitem
43. CO JE GIT?
Nastavení identity uživatele
$ cat ~/.gitconfig
[user]
name = Josef Novák
email = jnovak@example.com
Verzování kódu s Gitem
44. CO JE GIT?
Git je stupidní
Git je stupidní
$ cat ~/.gitconfig
[user] Content‐Type: text/plain
name = Josef Novák
email = jnovak@example.com
Verzování kódu s Gitem
45. CO JE GIT?
Jak Git ukládá obsah?
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.)
Verzování kódu s Gitem
46. CO JE GIT?
Jak Git ukládá obsah?
$ mkdir newrepo
$ cd newrepo
$ git init
$ echo "Hello, World" > file.txt
$ cat file.txt
$ git status Replay
$ git add file.txt
$ git status
$ git commit ‐m "Initial commit"
$ git log ‐‐stat
01__hello_world_git.sh
Verzování kódu s Gitem
47. CO JE GIT?
Jak Git ukládá obsah?
$ find .git/objects -type f
.git/objects/38/bca7264fc8b8340b560e19de3c780ae0a4b60d
.git/objects/3f/a0d4b98289a95a7cd3a45c9545e622718f8d2b
.git/objects/76/bf39ab0db46b183b49d9f707d86e580f78e932
.git/objects/7d/18cb53260cd51497cd70ed8cc00ce8094be681
Verzování kódu s Gitem
48. CO JE GIT?
Jak Git ukládá obsah?
.git/objects/38/bca7264fc8b8340b560e19de3c780ae0a4b60d
.git/objects/76/bf39ab0db46b183b49d9f707d86e580f78e932
Commit Tree
38bca7... 76bf39...
tree 76bf39... blob 3fa0d4... file.txt
parent N/A
author Karel ...
message Initial commit
Blob
3fa0d4...
Hello, World
Tag
7d18cb... .git/objects/3f/a0d4b98289a95a7cd3a45c9545e622718f8d2b
object 38bca7...
type commit
tag v.0.1
tagger Karel ...
.git/objects/7d/18cb53260cd51497cd70ed8cc00ce8094be681
Verzování kódu s Gitem
49. CO JE GIT?
Jak Git ukládá obsah?
2 Commit Tree
799659... ae2593...
tree ae2593... blob 3fa0d4... file.txt
parent 3fa0d4... blob a4ebe0... other_file.txt
author Karel ...
message Adding somefile
Blob
Commit
a4ebe0...
Tree
1 38bca7...
76bf39...
Lorem ipsum dolor
tree 3fa0d4...
blob 3fa0d4... file.txt
parent N/A
author Karel ...
message Initial commit
Tag
7d18cb...
Blob
3fa0d4...
object 38bca7...
type commit
tag v.0.1 Hello, World
tagger Karel ...
Verzování kódu s Gitem
53. ZÁKLADNÍ WORKFLOW
Připravení obsahu ke commitu
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# somefile.txt
nothing added to commit but untracked files present (use "git add" to
track)
Verzování kódu s Gitem
55. ZÁKLADNÍ WORKFLOW
Připravení obsahu ke commitu
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm ‐‐cached <file>..." to unstage)
#
# new file: somefile.txt
Verzování kódu s Gitem
57. ZÁKLADNÍ WORKFLOW
Označení obsahu, který nechceme verzovat
$ 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"
Verzování kódu s Gitem
61. ZÁKLADNÍ WORKFLOW
Staging area (index)
Scott Chacon, Getting Git (Scotland On Rails 2009), p. 197
http://github.com/schacon/git-presentations/raw/master/sor09/GitTalk-SOR09.pdf Verzování kódu s Gitem
72. ZÁKLADNÍ WORKFLOW
Zrušení všech úprav v souboru
$ 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
Verzování kódu s Gitem
73. ZÁKLADNÍ WORKFLOW
Zrušení všech úprav v souboru
Git si dává velký pozor, abyste nepřišli o data
Ale pouze u obsahu, který už je v repositáři
Verzování kódu s Gitem
74. ZÁKLADNÍ WORKFLOW
Checkout historické verze celého projektu
$ git log ‐‐oneline
d427f2a Change master^, v.0.1, origin/susan, atd
e82162c Initial commit
$ git checkout e82162c
Note: moving to 'e82162c' which isn't a local branch
If 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 history
e82162c Initial commit
$ git checkout master
Verzování kódu s Gitem
75. POKROČILÉ WORKFLOW
Návrat „o krok zpět“
$ git log ‐‐oneline
d427f2a Change
e82162c Initial commit
$ git reset HEAD^ ‐‐hard
HEAD is now at e82162c Initial commit
Verzování kódu s Gitem
79. 7 Sdílení repositáře a synchronizace
Verzování kódu s Gitem
80. SDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE
Zřízení sdíleného repositáře
$ ssh example.com
user@example.com: cd /path/to/git/repos
user@example.com: mkdir new_repository.git
user@example.com: $ git init ‐‐bare ‐‐shared=true
Verzování kódu s Gitem
81. SDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE
Zřízení lokální kopie sdíleného repositáře
$ cd /path/to/local/projects
# Pokud inicializujeme projekt od nuly
$ git clone user@example.com:/path/to/git/repos/new_repository.git
$ git clone user@example.com:/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 user@example.com:/path/to/git/repos/new_repository.git
Verzování kódu s Gitem
82. SDÍLENÍ REPOSITÁŘE A SYNCHRONIZACE
Konfigurace vzdáleného repositáře
$ git remote show origin
* remote origin
Fetch URL: user@example.com:/path/to/git/repos/new_repository.git
Push URL: user@example.com:/path/to/git/repos/new_repository.git
HEAD branch: (unknown)
Verzování kódu s Gitem
90. VERZOVACÍ SYSTÉMY
Taxonomie (delta/snapshot, local/centralized/distributed)
source control taxonomy
local rcs
delta
centralized cvs svn perforce
storage
distributed darcs mercurial
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
distributed git bazzar
Scott Chacon, Getting Git (RailsConf 2008)
http://www.slideshare.net/chacon/getting-git/67 Verzování kódu s Gitem
91. GIT JE DISTRIBUOVANÝ
Co znamená, že 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
Verzování kódu s Gitem
92. GIT JE DISTRIBUOVANÝ
Co znamená, že 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
Verzování kódu s Gitem
93. GIT JE DISTRIBUOVANÝ
Co znamená, že Git je „distribuovaný“
Workflows!
http://www.slideshare.net/chacon/getting-git/474
Verzování kódu s Gitem
94. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
Verzování kódu s Gitem
95. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
Verzování kódu s Gitem
96. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
Krycí jméno:
„Jako v Subversion“
developer developer developer
Verzování kódu s Gitem
97. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git clone
Verzování kódu s Gitem
98. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git push
Verzování kódu s Gitem
99. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git push
Verzování kódu s Gitem
100. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git push
Verzování kódu s Gitem
101. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git fetch && git merge
git pull
Verzování kódu s Gitem
102. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git push
Verzování kódu s Gitem
103. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
Verzování kódu s Gitem
104. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
Verzování kódu s Gitem
106. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
git clone
Verzování kódu s Gitem
107. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
git fetch && git merge
Verzování kódu s Gitem
108. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
git fetch && git merge
Verzování kódu s Gitem
109. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
git fetch && git merge
Verzování kódu s Gitem
110. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
git push
Verzování kódu s Gitem
111. MOŽNOSTI WORKFLOW S GITEM
Generál a pobočníci
dictator blessed repository
lieutenant
lieutenant
developer developer developer developer
git fetch
Verzování kódu s Gitem
112. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
Verzování kódu s Gitem
113. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
Verzování kódu s Gitem
114. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
/schacon/ticgit
github.com
/yob/ticgit /pope/ticgit
blessed
repository developer developer
public public
integration developer developer
manager private private
Verzování kódu s Gitem
115. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
/schacon/ticgit
github.com
/yob/ticgit /pope/ticgit
blessed
repository developer developer
public public
„forks“
integration developer developer
manager private private
Verzování kódu s Gitem
116. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
git push
Verzování kódu s Gitem
117. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
git clone
Verzování kódu s Gitem
118. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
git push
Verzování kódu s Gitem
119. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
git fetch && git merge
Verzování kódu s Gitem
120. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
git push
Verzování kódu s Gitem
121. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
git fetch && git rebase / merge
Verzování kódu s Gitem
122. MOŽNOSTI WORKFLOW S GITEM
Koordinátor
blessed
repository developer developer
public public
integration developer developer
manager private private
git push
Verzování kódu s Gitem
123. 9 Git podporuje paralelní vývoj
Verzování kódu s Gitem
126. BRANCH & MERGE
K čemu jsou nám užitečné větve (branches)
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 Verzování kódu s Gitem
127. BRANCH & MERGE
„Klasický scénář“
Uprostřed práce na rozsáhlém úkolu přijde požadavek
na změnu v produkční verzi kódu (hotfix)
Verzování kódu s Gitem
128. BRANCH & MERGE
Co je v Gitu branch?
40 písmenek v refs/heads
$ find .git/refs/heads ‐type f
.git/refs/heads/master
$ cat .git/refs/heads/master
87c93da440b099856fe3437c5bb269f01fb95379
Verzování kódu s Gitem
129. BRANCH & MERGE
Git a branch workflow
(...) 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
http://thread.gmane.org/gmane.comp.version-control.git/126568/focus=126571 Verzování kódu s Gitem
130. BRANCH & MERGE
Základní workflow
1
http://progit.org/book/ch3-2.html Verzování kódu s Gitem
131. BRANCH & MERGE
Základní workflow
2
$ git checkout ‐b iss53
http://progit.org/book/ch3-2.html Verzování kódu s Gitem
132. BRANCH & MERGE
Základní workflow
3
$ git commit ‐m "Pridan formular pro zmenu hesla uzivatele"
http://progit.org/book/ch3-2.html Verzování kódu s Gitem
133. BRANCH & MERGE
Základní workflow
4
$ git checkout ‐b hotfix
$ git commit ‐m "Oprava registracniho formulare na homepage"
http://progit.org/book/ch3-2.html Verzování kódu s Gitem
135. BRANCH & MERGE
Základní workflow
6
$ git commit ‐m "Dokonceni formulare na zmenu hesla"
http://progit.org/book/ch3-2.html Verzování kódu s Gitem
136. BRANCH & MERGE
Základní workflow
7
$ git checkout master
$ git merge iss53
Merge made by recursive.
http://progit.org/book/ch3-2.html Verzování kódu s Gitem
137. BRANCH & MERGE
Základní workflow
8
$ git checkout master
$ git merge iss53
Merge made by recursive.
http://progit.org/book/ch3-2.html Verzování kódu s Gitem
138. BRANCH & MERGE
„Merge hell“
„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…“
http://www.spearce.org/2007/07/difficult-gitk-graphs.html Verzování kódu s Gitem
139. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
Krycí jméno:
„Jako v Subversion“
developer developer developer
Verzování kódu s Gitem
140. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git push
Verzování kódu s Gitem
141. MOŽNOSTI WORKFLOW S GITEM
Centralizované worflow
shared repository
developer developer developer
git fetch && git merge
git pull
Verzování kódu s Gitem
146. GIT JE FLEXIBILNÍ
Integrace se Subversion
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
$ git svn init ‐s http://example.com/svn/my_proj
$ git svn fetch
$ git svn rebase
$ git svn dcommit
http://git.or.cz/course/svn.html
http://gitready.com/beginner/2009/02/04/converting-from-svn.html
http://www.kernel.org/pub/software/scm/git/docs/git-svn.html
Verzování kódu s Gitem
147. GIT JE FLEXIBILNÍ
Konfigurace, aliasy
$ 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
Verzování kódu s Gitem
150. GIT JE FLEXIBILNÍ
Interaktivní rebase
$ git rebase ‐‐interactive 01df473^
Oprava commitů v historii
Sloučení více commitů do jednoho
Odstranění commitů
Verzování kódu s Gitem
151. GIT JE FLEXIBILNÍ
Surový přepis historie repositáře
$ 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="lubomir@roztrzity.org";
fi
' -f
Verzování kódu s Gitem
153. GIT JE FLEXIBILNÍ
Binary bug search
Bad Good
$ cd repos/webexpo_planner_with_error
$ git bisect start HEAD v1.0
$ git bisect run rake test
Verzování kódu s Gitem
154. GIT JE FLEXIBILNÍ
Speciální diff nástroj
Dokument Microsoft Word
diff ‐‐git a/document1.doc b/document1.doc
index dfe0545..ff0d2d6 100644
Binary 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
Verzování kódu s Gitem
155. GIT JE FLEXIBILNÍ
Git jako toolkit
http://ephemera.karmi.cz/post/173776746/post-scriptum-k-setkani-na-tema-verzovaci-systemy
Verzování kódu s Gitem
156. GIT JE FLEXIBILNÍ
Deployment
➡ Hooks
➡ Capistrano (www.capify.org)
➡ Continuous Integration server
Verzování kódu s Gitem
160. GIT HOSTING
Githosting.cz Aktivita
v repositářích
Dashboard Prohlížeč
obsahu
repositáře
Prohlížeč
historie
Githosting vs Github: Více repositářů | Méně funkcí | Umístění v ČR | Česká fakturace a podpora
Verzování kódu s Gitem