Show in Frame No Frame
Up Previous Next Title Page Index Contents Search

3.5.1 Overview of approach
3.5.2 Getting started
3.5.3 Use cases and phases
3.5.4 Save Version actions
3.5.5 Versions in a multi-user repository
3.5.6 Overriding _vcsPaths() settings with .vcsPaths

3.5 Version control integration

MetaEdit+ supports integration with Version Control Systems via its API command-line operations and MERL. This section thus requires that your MetaEdit+ license includes the API features: they extend the Save Version command and add a menu bar for VCS Settings and Extra VCS Commands to the Changes & Versions Tool. The VCS operations are invoked from that tool, and use generators to call the necessary commands. Generators for Git and TortoiseSVN integration are included for Windows, and Git and SVN for Linux, and you can build on these to add support for other VCSs or platforms.

Before looking at the details, let’s take a step back to consider the role of VCSs in software development, and in modeling in particular.

From humble beginnings as simple text file archivers, Version Control Systems have grown to play a key role in software development. Modern VCS functionality handles three main tasks:
*Archive: maintaining older versions and allowing developers to return to them
*Collaboration: integrating the work of multiple developers
*Branching: handling long term parallel variants and configuration management.
VCS support for collaboration and branching is based on (semi-) automated merging of text files. Despite much research, automated merging of model files has proved largely unworkable. Approaches that worked on simple text files cannot cope with the more complex and strongly interlinked model data.

MetaEdit+ thus provides its own solutions for collaboration and branching, and for the core use cases these work even better for models than VCS merging does for text:
*Collaboration is handled by the multi-user version: the ease of Google Docs multi-user editing, without the distraction of others’ changes happening before your eyes — changes only become public when you have finished and committed them. Fine granularity locks ensure no conflicts, while letting you work closely together in parallel.
*Branching is handled in the modeling languages, using principles from Product Line Engineering: rather than copy a file wholesale to make a small change, have a separate language that specifies just the variability or differences from a core model (e.g. the WatchFamily language in the Digital Watch example).
Together, these offer a true continuous integration of all users’ work on all branches.

The role of a VCS in modeling thus returns to its original core function: archiving versions along with human-readable documentation of their changes. The change highlighting and Compare functions of the Changes & Versions Tool already help the user in documenting changes and exploring them later from within MetaEdit+. To add the ability to return to an earlier version of the repository, or open the latest or an earlier version on another PC, we leverage existing external VCS functionality, integrated with MetaEdit+ via MetaEdit+ API command-line operations and MERL.

Show in Frame No Frame
Up Previous Next Title Page Index Contents Search