Blog

News from the versioned universe

VersionPress vs. Revisr

One of the most frequently asked question we get, if not the most frequent one, is: “How does VersionPress compare to Revisr?” It's a good question, and one we've long wanted to answer properly, so here you go.

In June 2014, three new version control solutions for WordPress were announced: VersionPress, Revisr and Gitium (in the “order of appearance”). Gitium is also an interesting option, yet a bit different from the other two, and we may blog about it one day but let's focus on Revisr now. Its official page describes it like this:

Revisr is a Git and WordPress database plugin that allows you to keep track of your web projects in version control.

The description sounds similar to how one could describe VersionPress so people understandably think that we are similar. However, there are many important differences; let's start with a summary and then explain some of the more important points.

Note: VersionPress is a pre-release software and not all the features are implemented yet. For example, the GUI for db merges will only be available in a spring 2015 release. However, we always intended VersionPress to work as described below and already done some significant work towards those goals so we believe the comparison is fair.

VersionPress Revisr
Target audience Anyone Developers
Automatic change tracking Yes No
Manual change tracking Yes Yes
Rollback to previous state Yes Yes
Selective undo Yes No
Database merge Yes No
Relatively easy to implement No Yes
Available on wp.org No Yes

As you can see, the two solutions are quite different, and there is an underlying reason for that: Revisr is essentially a backup solution that uses Git repository as a storage while VersionPress is a full-fledged versioning plugin that has a deep understanding of what is going on on the site. The difference is best seen on a simple example:

Say that you have a WordPress site up and running and want to do some change on it. Being a good admin, you create a local development environment so that you don't test things on the live server. Say that the new feature requires some DB updates, which is very common because pretty much any piece of content in WordPress is a row in some database table. So you've updated your local database, possibly also done some edits to a couple of PHP files and now you want to push this back to the production.

That's where the true difference between the two solutions shows. What you need at this point is a database merge. Let's continue with the example.

Say that you created a database entity locally that got assigned a WordPress ID 123, and there has also been an update on the live site in the meantime, also generating a database entity with an ID of 123. The numbers are the same but the content may be completely unrelated. And Revisr, like all other MySQL-dump-based solutions (virtually any backup plugin out there), has no way of telling what's the case so it generally has to leave the hard and unpleasant work of the actual merge up to the user.

VersionPress is very different. We went to great lengths to invent our own diff/merge-friendly format to track the database and we are hooked into many WordPress actions to semantically understand what the database change was about. For example, in the case above we would know whether those two database entities are the same thing or not, and do the right thing (e.g., keeping both posts if that makes sense in that particular scenario).

This has many consequences. First of all, we can do proper branching and merging of files and the database which is very uncommon not only in the WordPress world but also beyond its borders. But there are also a lot of nice by-products. For example, the automatic change tracking means that VersionPress is generally usable by everyone, even by people who don't know what Git or version control is.

But there are also downsides to our approach. For example, Revisr with its rich GUI (which is very nicely done by the way) and quite a bit of features is actually a much smaller code-base. That means that it could be developed faster, on a smaller budget, the implementation is simpler etc. They also have less of a problem with 3rd party plugins, can focus more on the UI etc. There's undeniably a value in the simplicity they can afford.

So, as you can see, it is not really a question of what solution is “better”, they are just different. VersionPress and Revisr have different target audiences, solve different problems and are at a different stage of development. If you want a manual backup-to-Git solution, we would wholeheartedly recommend Revisr. They also support some simpler push scenarios so it's certainly a valuable tool. VersionPress is a lot more technically challenging which will bring nice, maybe even revolutionary things to the world of WordPress but it will be harder to get there.

Anyway, I am personally delighted that we hear the combination of the words “WordPress” and “Git” more often these days, it is really an important combination even if average users don't realize it yet. 2014 has been a promising start for WP sites versioning, 2015 will be even much better!

Note: at the time of writing VersionPress is close to its 1.0 release and you can join the EAP to support the development and get access to the releases.

Discuss & subscribe on Reddit:

r/VersionPress