Professional Documents
Culture Documents
Scott Chacon
10% 2m This Slide
4 min
2m Who is Scott?
3m What is Git?
3m What is Git?
3m What is Git?
3m What is Git?
3m What is Git?
3m What is Git?
3m What is Git?
3m What is Git?
3m What is Git?
3m What is Git?
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
source control taxonomy
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
sourcesource
control
controltaxonomy
taxonomy
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
local rcs
delta
centralized cvs svn perforce
storage
time
local cp -r
machine
DAG
centralized
storage
bitkeeper
How Does
Git Work?
10% 2m This Slide
4 min
2m Who is Scott?
3m What is Git?
sha = Digest::SHA1.hexdigest(new_content)
object database
content
sha = Digest::SHA1.hexdigest(new_content)
“824aed035c0aa75d64c...”
object database
content
sha = Digest::SHA1.hexdigest(new_content)
“824aed035c0aa75d64c...”
compressed = zlib::deflate(new_content)
object database
content
sha = Digest::SHA1.hexdigest(new_content)
“824aed035c0aa75d64c...”
compressed = zlib::deflate(new_content)
path = “.git/objects/82/4aed035c0aa75d64c...”
object database
content
sha = Digest::SHA1.hexdigest(new_content)
“824aed035c0aa75d64c...”
compressed = zlib::deflate(new_content)
path = “.git/objects/82/4aed035c0aa75d64c...”
“loose” format
+ content
sha = Digest::SHA1.hexdigest(new_content)
“824aed035c0aa75d64c...”
compressed = zlib::deflate(new_content)
path = “.git/objects/82/4aed035c0aa75d64c...”
.git/objects/pack/pack-999727..9f600.pack
.git/objects/pack/pack-999727..9f600.idx
object database
git gc
same file with minor differences
.git/objects/82/4aed035c0aa75d64c...
.git/objects/1d/c9cbcb76cbb80fce1...
.git/objects/63/874f37013c1740acd...
.git/objects/04/fb8aee105e6e445e8...
.git/objects/45/b983be36b73c0788d...
.git/objects/f1/032eed02413a1145c...
.git/objects/pack/pack-999727..9f600.pack
.git/objects/pack/pack-999727..9f600.idx
object database
git gc
same file with minor differences
“packed” format
.git/objects/82/4aed035c0aa75d64c...
.git/objects/1d/c9cbcb76cbb80fce1...
.git/objects/63/874f37013c1740acd...
.git/objects/04/fb8aee105e6e445e8...
.git/objects/45/b983be36b73c0788d...
.git/objects/f1/032eed02413a1145c...
.git/objects/pack/pack-999727..9f600.pack
.git/objects/pack/pack-999727..9f600.idx
object database
blob
object database
blob tree
object database
blob tree
commit
object database
blob tree
commit tag
object database
blob
object database
blob
Working Directory Git Directory
./
lib/
{ zlib::deflate
Zlib::Inflate
{ zlib::deflate
Zlib::Inflate
header
{ zlib::deflate
Zlib::Inflate
compress
header
{ zlib::deflate
Zlib::Inflate
compress
header
{ zlib::deflate
Zlib::Inflate
blob tree
commit tag
object database
tree
object database
tree
Working Directory Git Directory
./
lib/
./ tree : 1a738d
{ zlib::deflate
Zlib::Inflate
{ zlib::deflate
Zlib::Inflate
{ zlib::deflate
Zlib::Inflate
blob tree
commit tag
object database
commit
HEAD
object database
branch
commit commit
tree
tree blob
tree blob
blob
object database
commit : e1b3ec
{
tree e1b3ec
parent a11bef
zlib::deflate
Zlib::Inflate
{
tree e1b3ec
parent a11bef
zlib::deflate
Zlib::Inflate
{
tree e1b3ec
parent a11bef
zlib::deflate
Zlib::Inflate
{
tree e1b3ec
parent a11bef
zlib::deflate
Zlib::Inflate
{
tree e1b3ec
parent a11bef
zlib::deflate
Zlib::Inflate
object database
commit
tree
blob
object database
blob tree
commit tag
object database
tag
object database
HEAD
remote tag
branch tag
commit
tree
blob
object database
tag : 0c819c
{ zlib::deflate
Zlib::Inflate
object 0576fa
type commit
tag v0.1
tagger Scott Chacon
<schacon@gmail.com> 1205624655
{ zlib::deflate
Zlib::Inflate
object 0576fa
type commit
tag v0.1
tagger Scott Chacon
<schacon@gmail.com> 1205624655
{ zlib::deflate
Zlib::Inflate
object 0576fa
type commit
tag v0.1
tagger Scott Chacon
<schacon@gmail.com> 1205624655
{ zlib::deflate
Zlib::Inflate
object 0576fa
type commit
tag v0.1
tagger Scott Chacon
<schacon@gmail.com> 1205624655
{ zlib::deflate
Zlib::Inflate
object 0576fa
type commit
tag v0.1
tagger Scott Chacon
<schacon@gmail.com> 1205624655
blob tree
commit tag
object database
blob tree
immutable
commit tag
object database
blob tree
immutable
commit tag
can’t be muted
Git Directory
config file
hooks
index
object database
references
references
references
lightweight, movable HEAD
pointers to a commit
remote branch tag
commit
tree
blob
references
lightweight, movable HEAD
stored in .git/refs/*
pointers to a commit as simple files
remote branch tag
commit
tree
blob
references
HEAD
commit
tree
blob
the object model
HEAD
branch
commit
tree
tree blob
tree blob
blob
HEAD
branch
commit
tree
tree blob
tree blob
blob
HEAD
branch
commit
tree
tree blob
tree blob
blob
HEAD
tag branch
commit commit
tree tree
blob blob
HEAD
tag branch
commit commit
tree tree
blob blob
HEAD
tag branch
commit commit
tree tree
blob blob
HEAD
tag branch
commit commit
tree tree
blob blob
HEAD
tag branch
commit commit
tree tree
blob blob
HEAD
tag branch
commit commit
tree tree
blob blob
HEAD
tag branch
blob
tree blob tree
blob blob
HEAD
tag branch
blob
tree blob tree
blob blob
HEAD
tag branch
blob
tree blob tree
blob blob
HEAD
tag branch
blob
tree blob tree
blob blob
HEAD
tag branch
blob
tree blob tree
blob blob
HEAD
tag branch
blob
tree blob tree
blob blob
1 $ git checkout v0.1
2 .git/refs/tags/v0.1 "0c819c"
3 tag : 0c819c
commit : a11bef
tree : 1a738d
2 .git/refs/tags/v0.1 "0c819c"
3 tag : 0c819c
commit : a11bef
tree : 1a738d
2 .git/refs/tags/v0.1 "0c819c"
3 tag : 0c819c
commit : a11bef
tree : 1a738d
2 .git/refs/tags/v0.1 "0c819c"
3 tag : 0c819c
commit : a11bef
tree : 1a738d
2 .git/refs/tags/v0.1 "0c819c"
3 tag : 0c819c
commit : a11bef
tree : 1a738d
}
branch
commit
C1
tree
blob
branching and merging
HEAD
master experiment
C0 C1
C2 C3
C4
master experiment
C3
C0 C5
C1
git checkout -b
experiment
C2
experiment C3
HEAD
T1 master
master experiment
git commit
C0 C4 C1
2 C3 C5
C2 C3
experiment
HEAD
T1 master
master experiment
git commit
C1C0 C1 C4
git commit
C2 C3
C2 C5
C3
experiment
HEAD
HEAD
T1
master git checkout master
master
experiment
C1C0 C1 C4
C2 C3
C2 C5
C3
experiment
git commit
T1 T1
master master
HEAD
C1
C0 C1 C4 C4
C2 C3
C2 C5
C3 C5
experiment experiment
git tag -a ‘v1.1’ T1 T1
master master
HEAD
C1
C0 C1 C4 C4
C2 C3
C2 C5
C3 C5
experiment experiment
T1 master
C0 C1 C4
C2 C3 C5
git commit
HEAD
HEAD
T1 master
C0 C1 C4 C6
C2 C3 C5
C2
origin/master master
C0 C1 C2
master
C2
origin/master master
C0 C1 C2
aster
origin/master master master
C0C1 C1C2 C2
origin/idea
CR2 origin/master
C0 CL1 CL2
CR2 origin/master
C0 CL1 CL2
CR2 CR2
origin/master origin/master
CR3 CR1
CR4 CR3 CR4
C0
CL2 CL1 CL2 CL3
git checkout -b
tryidea
master master tryidea
origin/idea
CR2 origin/master
master tryidea
CR2 origin/master
master tryidea
origin/idea
CR2 origin/master
C0 CL1 CL2
master
remote workflow
local repo
internet
local repo
A B C
local repo
A B C
internet
git push
(ssh)
local repo
A B C
local repo
git fetch A B C
(git)
A B C
internet
git push
(ssh)
local repo
A B C
local repo
git fetch A B C
A B C
internet
git push
(ssh)
local repo
A B C
local repo
A B C A B C
internet D E F
git push
(ssh)
local repo
A B C
local repo
A B C A B C
internet D E F
local repo
A B C
D E F
local repo
A B C A B C
internet D E F D E F
local repo
A B C
D E F
multiple remotes
developer developer
nick jessica
my repo e4a
developer developer
nick jessica
commit
ce0 4a7 5ec master
my repo e4a
developer developer
nick jessica
tree
ce0 4a7 5ec master
my repo e4a
developer developer
nick jessica
blobs
ce0 4a7 5ec master
my repo e4a
developer developer
nick jessica
"public"
"public"
git commit
"public"
"public"
"public"
“nick”
"nick" "public" a09
ce0 4a7 5ec master ce0 4a7 5ec ce0 4a7 5ec
nickh/ schacon/ jessica/
my repo e4a public/master e4a e4a
project project project
24f ec5 c12 nick/master 4ea df7 2fb
"nick" "public" "jess" a09
gitgitfetch jess
git remote add jess git://github.com/jessica/project.git
fetch nick
ce0 4a7 5ec ce0 4a7 5ec
developer developer
e4a e4a
nick jessica
24f ec5 c12 4ea df7 2fb
a09
a09
public/master
public/master
ce0 4a7 5ec ce0 4a7 5ec
developer developer
e4a e4a
nick jessica
24f ec5 c12 4ea df7 2fb
a09
public/master
ce0 4a7 5ec ce0 4a7 5ec
developer developer
e4a e4a
nick jessica
24f ec5 c12 4ea df7 2fb
a09
public/master
ce0 4a7 5ec ce0 4a7 5ec
developer developer
e4a e4a
nick jessica
24f ec5 c12 4ea df7 2fb
a09
public/master
rebasing
local jessica
master C2
C1
local jessica
master C2 C2 master
git clone
C1 C1
local jessica
master C4 C6 master
git commit
C3 C5 git commit
C2 C2
C1 C1
local jessica
master C4 C6 master
pack
git fetch jess
C3 C5
C2 C2
C1 C1
local
master C4 C6 jess/master
C3 C5
C2
C1
git merge
master C4 C6 jess/master
C3 C5
C2
C1
git merge
master C7
C4 C6 jess/master
C3 C5
C2
C1
git merge git rebase
master C7
C3 C5 C3 C5
C2 C2
C1 C1
git merge git rebase
master C4'
master C7
C3'
C4 C6 jess/master C4 C6 jess/master
C3 C5 C3 C5
C2 C2
C1 C1
git merge git rebase
master C4'
master C7
C3'
C4 C6 jess/master C4 C6 jess/master
C3 C5 C3 C5
C2 C2
C1 C1
git merge git rebase
master C4'
master C7
C3'
C4 C6 jess/master C4 C6 jess/master
C3 C5 C3 C5
C2 C2
C1 C1
git merge git rebase
master C4'
2
master C7 1
C3'
C4 C6 jess/master C4 C6 jess/master
C3 C5 C3 C5
C2 C2
C1 C1
git merge git rebase
master C4'
master C7
C3'
C4 C6 jess/master C4 C6 jess/master
C3 C5 C3 C5
C2 C2
C1 C1
git merge git rebase
master C4'
master C7
C3'
C4 C6 jess/master C6 jess/master
C3 C5 C5
C2 C2
C1 C1
the treeish
the treeish
alternate ways to refer to
objects or ranges of objects
Treeish
• full sha-1 • carrot parent
• partial sha-1 • tilde spec
• branch or tag name • tree pointer
• date spec • blob spec
• ordinal spec • ranges
Full SHA1
6e453f523fa1da50ecb04431101112b3611c6a4d
Partial SHA1
6e453f523fa1da50ecb04431101112b3611c6a4d
6e453f523fa1da50
6e453
Branch, Remote
or Tag Name
v1.0
master
origin/testing
Date Spec
master@{yesterday}
master@{5}
master^2
master~2
master^{tree}
master:/path/to/file
ce0e4..e4272
ce0e4..
jess/master master
master^
b3be1 a09c6 df2fa c36ae
jess/master master
master^2
b3be1 a09c6 df2fa c36ae
jess/master master
master~2
b3be1 a09c6 df2fa c36ae
jess/master master
master^^^2
master~2^2
b3be1 a09c6 df2fa c36ae
jess/master master
master^^^2
master~2^2
b3be1 a09c6 df2fa c36ae
jess/master master
master^^^2
master~2^2
b3be1 a09c6 df2fa c36ae
jess/master master
master~3..master^
b3be1 a09c6 df2fa c36ae
jess/master master
local stuff
the index
Git Directory
config file
hooks
index
object database
references
index
index
working directory
git add
index
git commit
repository
index
working directory
git add
index
git commit
repository
index
working directory
git add
index
git commit
repository
what?
Object Directory Index Working Directory
5ec c12
4a7 ec5
5ec c12
4a7 ec5
git checkout
Object Directory Index Working Directory
5ec c12
git checkout
Object Directory Index Working Directory
5ec c12
git checkout
Object Directory Index Working Directory
5ec c12
git checkout
Object Directory Index Working Directory
5ec c12
git checkout
Object Directory Index Working Directory
5ec c12
git checkout
Object Directory Index Working Directory
5ec c12
git checkout
Object Directory Index Working Directory
5ec c12
vim file2
Object Directory Index Working Directory
5ec c12
git status
Object Directory Index Working Directory
5ec c12
git status
Object Directory Index Working Directory
5ec c12
git status
Object Directory Index Working Directory
5ec c12
5ec c12
5ec c12
5ec c12
5ec c12
5ec c12
git status
Object Directory Index Working Directory
5ec c12
git status
Object Directory Index Working Directory
4a7 ec5 a3e 24f 24f 24f 1:30 file1 1:30 /file1
ce0 e4a 24f 1ba
1ba 1ba 1ba 1:31 file2 1:31 /file2
git commit
Object Directory Index Working Directory
4a7 ec5 a3e 24f 24f 24f 1:30 file1 1:30 /file1
ce0 e4a 24f 1ba
1ba 1ba 1ba 1:31 file2 1:31 /file2
git commit
Object Directory Index Working Directory
4a7 ec5 a3e 24f 24f 24f 1:30 file1 1:30 /file1
ce0 e4a 24f 1ba
1ba 1ba 1ba 1:31 file2 1:31 /file2
git commit
Object Directory Index Working Directory
4a7 ec5 a3e 24f 24f 24f 1:30 file1 1:30 /file1
ce0 e4a 24f 1ba
1ba 1ba 1ba 1:31 file2 1:31 /file2
git commit
Object Directory Index Working Directory
4a7 ec5 a3e 24f 24f 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba
1ba 1ba 6d4 1:32 file2 1:32 /file2
4a7 ec5 a3e 24f 24f 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba
1ba 1ba 6d4 1:32 file2 1:32 /file2
4a7 ec5 a3e 24f 24f 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba
1ba 1ba 6d4 1:32 file2 1:32 /file2
4a7 ec5 a3e 24f 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
4a7 ec5 a3e 24f 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
4a7 ec5 a3e 24f 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
4a7 ec5 a3e 24f 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
git status
Object Directory Index Working Directory
4a7 ec5 a3e 24f 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
git status
Object Directory Index Working Directory
4a7 ec5 a3e 24f 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
git status
Object Directory Index Working Directory
4a7 ec5 a3e 1a7 91b 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
git commit
Object Directory Index Working Directory
4a7 ec5 a3e 1a7 91b 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
git commit
Object Directory Index Working Directory
4a7 ec5 a3e 1a7 91b 91b 91b 1:32 file1 1:32 /file1
ce0 e4a 24f 1ba 91b
1ba 1ba 6d4 1:32 file2 1:32 /file2
3m What is Git?
git add
index
git com
repository
working directory
git add
index
git commit
repository
git log
git log --pretty
6 Down
git diff
git diff (treeish1) (treeish2)
git diff master^ > change.diff
git diff master^ > change.diff
$ git am mbox
Multiple Commits
1 patch file per commit
in this directory
$ git am mbox
example: patching rails
Patching Rails
git clone git://github.com/rails/rails.git
develop
topic
master
develop
topic
master
develop
topic
master
develop
topic
master
develop
topic
master
develop
topic
master
develop
topic
master “production”
develop
topic
master “production”
develop “trunk”
topic
master “production”
develop
convention!
“trunk”
topic
branching workflow
normal development
want to try an idea
have to do a hotfix
merge idea into development
push to production
branching workflow
normal development
want to try an idea
have to do a hotfix
merge idea into development
push to production
master
C0
C3 C4
C1 C2
develop
story95
idea
branching workflow
normal development
want to try an idea
have to do a hotfix
merge idea into development
push to production
master
C0
C3 C4
C1 C2
develop
story95
idea
master
C0
C3 C4
C1 C2
develop
story95
idea
master master
C0 C6
C3 C4 C5
C1 C2
develop idea
story95
branching workflow
normal development
want to try an idea
have to do a hotfix
merge idea into development
push to production
master master
C0 C6
C3 C4 C5
C1 C2
develop idea
story95
branching workflow
normal development
want to try an idea
have to do a hotfix
merge idea into development
push to production
master
C0 C6
C3 C4 C5
C1 C2
develop
story95
branching workflow
normal development
want to try an idea
have to do a hotfix
merge idea into development
push to production
master
C0 C6 C7
C3 C4 C5
C1 C2
develop
story95
master
C0 C3 C4 C5 C6'
develop
C1 C2
story95
master
C0 C3 C4 C5 C6'
develop
C1 C2
story95
master
C0 C3 C4 C5 C6'
develop
C1 C2
story95
master
C0 C6 C7
merge
C3 C4 C5
C1 C2
develop
story95
master
C0 C3 C4 C5 C6'
rebase
develop
C1 C2
story95
one more time now!
master
C0
C3 C4
C1 C2
develop
story95
idea
master
C0
C3 C4
C1 C2
develop
story95
idea
C0 C6
C3 C4 C5
C1 C2
develop idea
story95
git commit
master master
C0 C6
C3 C4 C5
C1 C2
develop idea
story95
C0 C6
C3 C4 C5
C1 C2
develop
C0 C6 C7
C3 C4 C5
C1 C2
develop
story95
developer developer
shared repository
developer developer
developer developer
shared repository
git clone
shared repository
git push
shared repository
git push
shared repository
git fetch
git merge
shared repository
git push
dictator and lieutenants
model
dictator blessed repository
lieutenant
lieutenant
lieutenant
lieutenant
git clone
dictator blessed repository
lieutenant
lieutenant
git fetch
git merge
dictator blessed repository
lieutenant
lieutenant
git fetch
git merge
git fetch; git merge
dictator blessed repository
lieutenant
lieutenant
lieutenant
lieutenant
lieutenant
lieutenant
git fetch
integration manager
model
blessed
repository developer developer
public public
git push
blessed
repository developer developer
public public
git clone
blessed
repository developer developer
public public
git push
blessed
repository developer developer
public public
git fetch
git merge
blessed
repository developer developer
public public
git push
blessed
repository developer developer
public public
git fetch
git rebase / merge
blessed
repository developer developer
public public
git push
How Do I Deploy
with Git?
10% 2m This Slide
4 min
2m Who is Scott?
3m What is Git?
set :git_shallow_clone, 1
set :git_enable_submodules, 1
ruby + git
ruby + git
grit
git gem
git-ruby
ruby + git
grit
git gem
git-ruby
github.com/schacon/
ruby-git
Where Can I
Learn More?
10% 2m This Slide
4 min
2m Who is Scott?
3m What is Git?
gitcasts.com/git-talk
notes, these slides, etc
thats it!
gitcasts.com/git-talk
notes, these slides, etc