Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Distributed Version Control with Mercurial
1. distributed version
control with mercurial
or: how I learned to stop worrying and love the merge
Presented by Ted Naleid
Wednesday, November 4, 2009
2. overview
robust and mature
“centralized” and “distributed”
advantages over subversion
why svn merging is broken
subversion’s advantages
comparison to git
concepts
basic usage
how to get started
Wednesday, November 4, 2009
4. large projects
Python
Mozilla
NetBeans
OpenOffice
OpenSolaris
OpenJDK
Symbian OS
Xen Hypervisor
Wednesday, November 4, 2009
5. cross platform support
great command line on win/mac/linux
standalone GUIs
windows - TortiseHG
mac - murky
linux - hgk
Wednesday, November 4, 2009
6. IDE support
IntelliJ
Eclipse
NetBeans
Visual Studio
TextMate
BBEdit
emacs
vi
Wednesday, November 4, 2009
7. continuous integration and
bug tracking
Hudson
Cruise Control
BuildBot
Bamboo
TeamCity
JIRA
Trac
FogBugz/Kiln
+ support in maven and ant
Wednesday, November 4, 2009
8. internet hosting
bitbucket
Google Code
SourceForge
kenai (Sun)
Wednesday, November 4, 2009
9. Build Server
commit
Remote
update Repo
centralized version
control systems
Wednesday, November 4, 2009
10. Build Server
Build
Repo
sh
pu
ll
pu
commit
Alice's Carl's
update Repo Repo
Bob's
Repo
distributed version
control system
Wednesday, November 4, 2009
11. Build Server
Build
Repo
sh
pu
ll
pu
commit push
Alice's Carl's
update Repo pull Repo
pu
sh
pu
ll
Bob's
Repo
distributed version
control system
Wednesday, November 4, 2009
44. change sets are stored as
nodes in a DAG
(directed acyclic graph)
tip
newest r3
file system version
r2
time
r1
oldest r0
Wednesday, November 4, 2009
45. a change set with no
children is a “head”
r3
r2
r1
r0
Wednesday, November 4, 2009
46. change sets have zero, one
or two parents
Wednesday, November 4, 2009
47. the root has zero parents
r4
r3
r2
r1
r0
Wednesday, November 4, 2009
56. hg init
hg add
hg commit -m “project start”
create a new r0 “project start”
repository
Wednesday, November 4, 2009
57. <changes ...>
hg commit -m “created domain”
commit changes
to your r1 “created domain”
local repository r0 “project start”
Wednesday, November 4, 2009
58. <more changes...>
hg commit -m “updated user”
commit changes
to your r2 “updated user”
local repository r1 “created domain”
r0 “project start”
Wednesday, November 4, 2009
59. hg update -r 1
switch your file
system to a r2 “updated user”
different revision r1 “created domain”
r0 “project start”
Wednesday, November 4, 2009
64. hg pull
get the latest c
changes from b b
another
repository a
remote
a
local
Wednesday, November 4, 2009
65. hg pull
pull adds c c
changes but b b
doesn’t modify
file system a
remote
a
local
Wednesday, November 4, 2009
66. hg update
update your c c
working directory b b
with the changes a a
remote local
Wednesday, November 4, 2009
67. what if you’ve already made
a change in your repository?
Wednesday, November 4, 2009
68. hg pull
we added c to b d c
b b
they added d to b a a
remote local
Wednesday, November 4, 2009
69. hg pull
d
d c
pulling in d gives b b
us a new head a a
remote local
Wednesday, November 4, 2009
70. hg update
# abort, crosses branches
d
when we try to d c
update to the tip, b b
hg says you need
to merge a
remote
a
local
Wednesday, November 4, 2009
71. hg merge
<resolve any conflicts>
hg commit -m “merge done”
e
d
d c
merge the b b
changes together
a a
remote local
hg fetch does all this in one command
(pull, update, merge, commit) use that instead
Wednesday, November 4, 2009
72. hg push
e
d
d c
push changes b b
back out
a a
remote local
Wednesday, November 4, 2009
73. hg push
e e
d d
c c
push changes b b
back out
a a
remote local
Wednesday, November 4, 2009
74. how to get started
with mercurial
Wednesday, November 4, 2009