Post on 15-May-2015
Understanding Distributed SourceControl
About Me
2
• Lorna Jane Mitchell
• http://lornajane.net
• PHP Consultant/Developer
• Open Source project lead http://joind.in
• Occasional writer/speaker
• Twitter: @lornajane
Source Control
The Aims of Source Control
4
• Central keeping-place
The Aims of Source Control
4
• Central keeping-place
• History of changes
The Aims of Source Control
4
• Central keeping-place
• History of changes
• Painless collaboration
Traditional Centralised Source Control
5
• One repository (repo)
• Working copies
• Mature
• Simple
• Tools:
• CVS
• Subversion http://subversion.apache.org/
Traditional Centralised Source Control
6
repo
checkout checkoutcheckout
Subversion
7
Recommended centralised solution
Project is now an Apache Software Foundation project. From the missionstatement:
Subversion exists to be universally recognized and adopted as anopen-source, centralized version control system characterized by its
reliability as a safe haven for valuable data; the simplicity of its model andusage; and its ability to support the needs of a wide variety of users and
projects, from individuals to large-scale enterprise operations.
http://lwn.net/Articles/381794/
Centralised Branching Strategies
8
There are a few common patterns when branching:
• Version branches
• Feature branches
• Live branch
Code Merging with Centralised Systems
9
• Make changes
• Update
• Commit
• Merge happens on central repo
• Can be slow
Distributed Source Control
10
• Many repos
• Local repo
• Tools (all with comparable features)
• Git http://git-scm.com/
• Mercurial http://mercurial.selenic.com/
• Bazaar http://bazaar.canonical.com/
• Powerful/complex
Distributed Source Control
11
repo
repo reporepo repo
Distributed Source Control
12
repo
repo
repo
repo
repo
The Biggest Change
13
FAST
Snapshots vs Changesets
14
A revision number describes a set of patches. Not a state of code.
With distributed version control, the distributed part is actually not themost interesting part. The interesting part is that these systems think in
terms of changes, not in terms of versions
http://www.joelonsoftware.com/items/2010/03/17.html
Branching on Distributed Systems
15
• Can branch any repo
• Branches can be private
Branching on Distributed Systems
15
• Can branch any repo
• Branches can be private
• Merge commits from other branches on local repo
Working with Branches: Creating
16
$ git branch api
$ git branchapi
* master
$ git checkout apiSwitched to branch 'api'
$ git branch
* apimaster
Working with Branches: Using
17
$ mkdir api$ vim api/index.php$ git add api/
$ git commit -m "added the web service"[api 62582e1] added the web service
1 files changed, 4 insertions(+), 0 deletions(-)create mode 100644 api/index.php
$ lsapiwebsite
Working with Branches: Switching
18
$ git checkout masterSwitched to branch 'master'
$ lswebsite
Multiple Repositories
19
remote repo
main repo
local
Timelines
20
• Commits keep their timestamps
• They show at the time they were commited
• To a repo
• Not when they were merged to this one
• Tools help illustrate
Timelines: git log –oneline
21
be81f69 Merge branch 'master' of git://github.com/joindi n/joind.ina67dabb Merge commit 'fentie/issue91'526039d Merge commit 'jaytaph/JOINDIN-38-2'0bc1a57 merge of hatfieldje/feature/JOINDIN-100d3c7195 Added slide icon to talk-list983d1a0 Fixed dates in CfP display and talk add/edit4edf8be Merge commit 'justincarmony/JOINDIN-97'bec3ac1 Moving the settings from the method to the Controlle r's members01d3feb Admins can approve other admins31ba4c1 Added counter to Event Claims linkce2e46b Updated README. Includes instructions for enablin g RewriteEnginece356d5 Corrected session type dropbox9c2f645 Merge commit 'justincarmony/74-howto-block'0ce1551 Merge remote-tracking branch 'jaytaph/JOINDIN-1 04'
Timelines: git log –graph –oneline
22
* be81f69 Merge branch 'master' of git://github.com/joindi n/joind.in|\| * a67dabb Merge commit 'fentie/issue91'| |\| | * 2b229ef IDE removing extra EOL whitespace| | * 82b3aa7 switching to single empty test instead of !isset and false| | * b03d6df adding check to ensure speakers cannot rate their ow n talks| * | 526039d Merge commit 'jaytaph/JOINDIN-38-2'| |\ \| | * | 01d3feb Admins can approve other admins| | * | 31ba4c1 Added counter to Event Claims link| * | | 0bc1a57 merge of hatfieldje/feature/JOINDIN-100| |\ \ \| | * | | 983d1a0 Fixed dates in CfP display and talk add/edit| | * | | 0ddfd83 JOINDIN-100| | * | | d00e1f3 feature/JOINDIN-100| | * | | f5a5775 feature/JOINDIN-100| * | | | d3c7195 Added slide icon to talk-list
Products and Supporting Tools
GUI Tools
24
Most OS/DVCS combinations covered
• IDE plugins
• Versions on OS X for SVN
• Tower on OS X for git
• Tortoise* for Windows users
• git and windows not recommended
• CLI on every platform
Bridging the Gap
25
Bridges: local DVCS functionality with centralised repos
Tools:
• git-svn
• bzr-svn
• hg-git
• and more
Supporting Distributed Workflows
26
Need to keep track of:
• Commits on other repos
• Relationships between repos
• Patches (pull requests)
Supporting Distributed Workflows
26
Need to keep track of:
• Commits on other repos
• Relationships between repos
• Patches (pull requests)
Often: source browsing, documentation and issue trackers are alsoincluded
Collaboration Sites
27
• Git
• Github http://github.com/
• Gitorious http://gitorious.org/
• Mercurial
• Bitbucket http://bitbucket.org/
• Bazaar
• Launchpad http://launchpad.net/
Also Sourceforge who support all of the above and more http://sf.net
Understanding Distributed Source Control
28
• Differences from centralised systems
• Tools
• Gotchas
Questions?
Thanks!
30
• Slides: http://slideshare.net/lornajane
• Twitter: @lornajane
• Web: http://lornajane.net/