Puneet Varma (Editor)

Plastic SCM

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit
Developer(s)
  
Codice Software

Size
  
33 MB

Platform
  
.NET / Mono

Initial release
  
3 July 2007; 9 years ago (2007-07-03)

Stable release
  
4.1 / February 27, 2012; 5 years ago (2012-02-27)

Operating system
  
Microsoft Windows, Linux, Solaris, Mac OS X

Plastic SCM is a cross-platform commercial distributed version control tool developed by Códice Software Inc. It is available for Microsoft Windows, Mac OS X, Linux, and other operating systems. It includes a command-line tool, a GUI, and integration with a number of IDEs.

Contents

History

According to its creators, Plastic SCM tries to fill the gap between open-source distributed source control platforms as Git or Mercurial and enterprise platforms such as Perforce or ClearCase. The product launched its first versions in early 2007, and starting with version 4.0 the internal architecture has been changed to a Directed Acyclic Graph (DAG). In 2012 support for git synchronization has been announced.

Features

  • Complete file and metadata history
  • Revision history for branched, renamed, moved, copied, and deleted files
  • Rename support, also across branches
  • Graphical representation of the history of files and directories through the 2D version tree
  • Graphical representation of the evolution of the repository through the branch explorer
  • Three-way text file merging; merge tracking and re-merge prevention; common ancestor detection
  • Graphical diffing, merging, and offline/online reconciliation tools
  • Graphical file content history and branch history viewers
  • Centralized, access-controlled repository with support for distributed revision control (see below)
  • Atomic commits—the server assures that changesets are committed in the repository entirely
  • Shelving—users can save and restore work in progress for task switching
  • Support for ASCII, Unicode, binary, symbolic link (on Unix), Mac-specific, and UTF-16 files
  • Support for Mac OS X, Windows and Linux platforms
  • Server-side and client-side event triggers
  • Clients

    There are different kind of clients:

  • Command line tool: cm
  • GUI tool: plastic
  • Integrations with third party IDEs, most notably Visual Studio, Eclipse, IntelliJ IDEA and any SCC compatible environment.
  • The command line tool can be used for automation. It can be run in "shell mode" (cm shell) where the command stays open and receives commands through the standard input, avoiding to restart the process for every command what is useful for high performance integrations.

    The GUI for Linux do not have all the functionality, and it looks is not being updated, the mergetool is not ported, you must use third-party software like Kdiff3, and the package repositories for apt, yum, etc. are not available any more.

    Architecture

    Plastic is a client/server system although in current terms of version control it can also be defined as a distributed revision control system, due to its ability to have very lightweight servers on the developer computer and push and pull branches between servers (similar to what Git and Mercurial do).

    Developers work on files in their client workspaces, and check in changed files together in changesets.

    Communication from client to server is done through a customized .NET Remoting channel.

    Database

    The default Plastic database on a regular installation is a SQL Server Compact embedded database on Windows systems and an SQLite embedded database on Linux and Mac OS X (since Plastic 3.0).

    The database can be configured by tweaking the db.conf file located on the server directory and can be set up to use any of the other alternatives.

    The database can be queried to extract extended information. All the data and metadata are stored in the database.

    Administrators can set up their preferred database system and set it up to run backups, disaster recovery and high-availability.

    Every repository is stored in a separate database, except in case of Oracle, where every repository is a different user and tablespace.

    Concurrency model

    Plastic is based on a branch & merge concurrency model. Optionally it is possible to do exclusive checkouts in order to prevent concurrency, but it is neither the default nor the recommended way of working.

    A checkout in Plastic doesn't mean a lock. It just means a new revision of the item is created in order to be edited. Several checkouts of the same item can be performed in parallel on different workspaces, even on the same branch.

    In the default checkout and change model, users are expected to let the system know in advance which files they intend to change, even if they do not mean to lock them (similar to Perforce).

    Since version 2.8 it is also possible to perform a change and commit cycle in which a previous checkout is not needed, as developers from systems such as Subversion or Git are used to.

    Branching

    Every item (file or directory) is identified by a unique id instead of a path.

    Files do not have names directly associated, but as it happens with a file system, directories handle all naming. It makes renaming a very cheap operation.

    Branches are defined as revision containers. Creating a branch doesn't perform any copy of revisions, it simply creates a new empty object.

    Plastic branches are hierarchical: there's always a main branch (by default named /main) on every repository and normally all branches are created as child branches. A child branch means it inherits everything from its parent except the contents it already has. So, after creation, a branch is empty but it inherits its contents from the parent branch.

    That's why when a new branch is created on Plastic it doesn't have any contents but if a workspace is switched (updated) to the branch the workspace won't be empty.

    Branches with hierarchy are also known as smart branches and their inheritance can be set up as follows:

  • Inherit from a specific label
  • Inherit from a specific changeset
  • Dynamic inheritance from the parent branch, which means a change on the parent branch will be directly inherited to the child branches set up with dynamic inheritance
  • Branching is a cheap operation and the recommended workflow with Plastic encourages the creation of many branches (branch per task).

    Merging

    As of version 3.0 merge tracking information is kept on a per item basis. Every file and directory keeps track of the merge links between its revisions. Merge tracking information is used to calculate the nearest common ancestor of the two candidates on a merge, and parent links and merge links are weighted differently.

    Merging is meant to be a focus feature of Plastic, and the system is built around this capability.

    Distributed revision control

    Plastic is able to push and pull branches from remote repositories, and merge conflicts if modifications happened on the same branch on two locations concurrently on the same files or directories. In case of conflict during push or pull operations, a fetch branch is created containing the fetched revisions. The branch can be merged later.

    Plastic also provides a proxy server that caches frequently accessed revision data and can be used to reduce traffic on centralized setups.

    Backend support

    The Plastic server stores data and metadata on a relational database. The database can be one of the following:

  • SQL Server
  • SQL Server Compact
  • Firebird
  • Oracle
  • SQLite
  • MySQL
  • PostgreSQL
  • Access control

    Plastic differentiates from access control and security. User and group information can be retrieved from one of the following sources:

  • LDAP
  • Active Directory
  • Built-in user/password
  • Local users on the client and server machine (if the network is secured, Plastic is secured, otherwise there's no secured auth in this mode)
  • Security

    Every object in the system (branches, repositories and changesets included) has an associated access control list (ACL) and there is a set of 32 different permissions to tune security.

    Availability, release cycle and supported platforms

    Free downloads of Plastic server, client, and plugin software are available from Codice Software's website.

    Major releases of server and client software are typically published twice a year as pre-built executables for Microsoft Windows, Mac OS X, Linux, and other operating systems. Minor releases are available on a weekly basis.

    Licensing and terms of use

    Free licenses are available for open source software development, school or classroom projects, and trial/evaluation periods.

    Community Edition, free for up to 15 users, was released on November 1, 2010.

    Commercial licenses are also available.

    References

    Plastic SCM Wikipedia