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.