Your SlideShare is downloading. ×

Dscm barcelona

2,184
views

Published on

Distributed Source Code Management. Evolution of SCM, Centralised V's Distributed and then a comparison of the core concepts of Mercurial, Git and Bazaar.

Distributed Source Code Management. Evolution of SCM, Centralised V's Distributed and then a comparison of the core concepts of Mercurial, Git and Bazaar.

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,184
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

  • Writing software for 11 years (Java, Ruby, Php) - (Sun, DB, Betfair?)
    Clearcase, CVS, SVN, Git
    In Valencia for 8 years
    Ask questions at any time - English or Spanish
  • Version control vital
    Only part of project success- No golden bullet
    Definition, Evolution, SVN vs Distributed (Git), Mercurial/Git/Bazaar -> A little advice.
    Aim - to give you the knowledge to make an informed choice given your projects’ context.

  • Disaster recovery
    Multiple simultaneous versions
    Traceability
    Collaboration - who, when (and WHY if you’re lucky!)
  • Three generations of SCM tools
    Drivers -> shortcomings of existing tools + improvements in technology (connectivity)
    I forget to unlock and you can’t write to the file
  • CVS used RCS as a building block.
    TeamWare used SCCS - first system with no notion of a central repo (EOL).
    CVS - simultaneous changes stored individually and poor file hierarchy management
    Subversion - multi-file atomic commits, better namespaces
    Visual SourceSafe (Microsoft) - read the web page, it puts the fear of God into me.


  • Linux was using BitKeeper. Was one of the first to allow a truly distributed model
    Bazaar - Ubuntu, MySQL
    Mercurial - Firefox, Opera, CodeIgniter, Google
    Git - Facebook, Twitter, jQuery, Rails
  • Everything is local, faster
    Backups are every contributor’s copy
    Flexibility - Tools don’t dictate your workflow
  • .svn files pollute your local directories.
    Offline commits are not possible.
    No way to push changes to another user (without submitting to the Central Server).

    Subversion fails to merge changes when files or directories are renamed.
    Major reason is that branching is easy but merging is a pain.
  • .svn files pollute your local directories.
    Offline commits are not possible.
    No way to push changes to another user (without submitting to the Central Server).

    Subversion fails to merge changes when files or directories are renamed.
    Major reason is that branching is easy but merging is a pain.
  • Social Coding
    LaunchPad - Pretty basic experience, 5 min wait for web to update, Loggerhead viewer
    Google Code supports Mercurial too but over http




  • quite a good user experience


  • Smoothest experience


  • LaunchPad - Pretty basic experience, 5 min wait for web to update, Loggerhead viewer



  • Clicking on “view branch content”

  • Links to compare web-sites for each tool.
    Look at the differences and then some practical examples.


  • Most specific at the bottom - Last one wins any conflict
    Tool level configuration - shell / IDE config later
  • Mercurial Remotes - default for pulls, named remotes are possible but config editing is by hand.
    Bazaar - automatic after the first push, are named remotes possible?
  • Mercurial - Only the hexnum is guaranteed unique -> Bazaar - Only the revision_id is guaranteed unique
    Advantages?
    Mercurial stores Changesets - what has changed / safer because it only ever appends data
    But fundamentally they all deal with patch files - groups of “diff”s - which are made up of “hunks”.



  • History is immutable
    Standard is to clone the repo in a new directory
    Simple, intuitive, more like SVN, therefore less mistakes
    Apply a persistent name to a branch lets you do something Git like


  • No clone of the repository in a new directory.
    A push does not oblige you to push all branches.
    Functionality is partially available in other systems with plugins, etc.
  • Bound branch is like subversion but checks you’re up to date with the central repository BEFORE making the local commit.
    Philosophy that the trunk should be ready to ship all the time
  • CVS and SVN - “time to branch” is low, but merging itself is almost always a painful process.
    Merging a second time from another branch is WORSE.
    Incentives for developers to merge regularly are exactly the wrong way around.
    Tools need to track what has already been merged.
  • Manage a stack of patches
    Can be put under version control
    Can be shared independently of the main repository



  • Git is installed with .sample example scripts in .git/hooks
    Example use cases
    Arguments passed to scripts

  • Murky only for OS X
  • Netbean has support as well

  • Jira searches for IDs in the repository (SVN plugin) BugTracker -> SCM
    Bugzilla - Bazaar / Mercurial / Git hooks update the bug IDs SCM -> BugTracker

  • Capistrano - deployment runs on the target server - gets the code from the SCM system