The Escenic Content Engine's Snapshot plug-in provides a source code management service for Widget Framework blueprints.
A blueprint is a collection of Widget Framework templates that defines the layout of a Widget Framework web site: the templates in a blueprint are used to render the content in a site publication. This separation of layout and content means that the same content can easily be given a different look and feel by changing the blueprint used to render a site publication. Conversely, you can easily ensure that a group of related sites have the same look and feel by using the same blueprint to render them. For further information, see the Widget Framework documentation.
The Snapshot source code management service is based on git, the popular open source version control system. It uses git's configuration management functionality to provide template developers with simple development, testing and deployment workflows.
The Snapshot plug-in includes an extension to Content Studio, a dashboard which template developers, testers and production editorial staff can use to manage blueprints.
Template developers can (among many other things) use it to:
Branch blueprints: that is, create development copies of blueprints that they can work on without interfering with other developers' work or affecting the production version of the blueprint.
Merge their changes to a blueprint with changes made by other developers in other branches
Testers can use it to:
Easily switch between different branches of a blueprint for testing purposes
Editorial staff can use it to:
Easily update the look and feel of publications by switching between blueprints (changing active blueprint).
Although the Snapshot plug-in provides a relatively simple interface to the underlying git functionality, at least some users in an organisation need to have a good understanding of git in order to be able to resolve any issues that may arise. Merge operations can occasionally fail due to conflicts (where two different users have updated the same field of a widget, for example). In such cases the branches will need to be merged using git directly, and the conflicts manually resolved.