Distributed Source Code Management. Evolution of SCM, Centralised V's Distributed and then a comparison of the core concepts of Mercurial, Git and Bazaar.
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Notes de l'éditeur
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