People always find it interesting when I tell them my first version control was Perforce. For most people its either CVS or SVN. However, what they don’t know is that Perforce has always offered a free 2 user license which I would use on my personal projects (now its free for 20 users!).
While I have recently switched to Git because I do like the lightweight branching model and the hosted solutions offered by GitHub and BitBucket, Perforce remains a very strong and mature competitor.
Picking a Git client for comparison
Perforce has a very strong GUI client called P4V which can run circles around all the Git clients available. Since Git has many clients, all of which are very similar to each other, I have decided to pick just one for comparison here. The one I have picked is SourceTree.
SourceTree makes for a good comparison because its:
- Backed by a commercial entity, Atlassian
- Very popular (and free)
- Considered one of the best Git clients out there
- Fundamental interface is similar to a most Git clients out there
So, on with the comparisons:
1. Folder Centric view
With P4V you can view your entire repository’s content and directory structure without needing to check out every branch separately.
I always find it weird to open SourceTree and not being actually able to view my source code.
I understand my folder/file layout much better than I understand just a bunch of commit messages. The folder centric view also allows P4V to offer all the powerful features described below in a very natural way.
2. Folder History
Click on a folder and I can instantly see just the list of changes made to it. And clicking on a change shows me the affected files. This comes about very naturally in Perforce since every branch, heck even the entire repository, is just another folder. So you are always viewing the history of some folder.
SourceTree, on the other hand, without a view of the directory structure, has no way to even offer this command.
3. Revision Graph
This really cool view in P4V shows all the changes ever made to a file and how it progressed through various branches, all in a nice graph.
No such thing in SourceTree.
4. Time Lapse View
Another Perforce exclusive, shows you how the contents of a file changed over time, Also shows you how old/new a particular line of code is.
5. Folder Diff
I can select the same folder in two different branches and do a diff of them. Very, very useful to know what is missing from the other. Also very useful while doing merges.
I know Git is known for its powerful merging capabilities, but Perforce is no slouch at it either. That said, at some point you are going to run into conflicts. Perforce’s amazing three way diff tool and folder diff tools allow you to much easily resolve the merge than SourceTree.
7. Per Directory Permissions
With Perforce, I can give my designer access to just the html/css folders and not worry about him having to even know about the programming code.
With Git, apart from creating a whole new repository, you are stuck with an all or nothing approach.
8. Show me the damn branch name
This one icks me the most about SourceTree. For a version control which is all about branching, it irritates me to no extent when I see a forked red/yellow branch line next to a commit and even clicking on it to see all the details doesnt tell me which damn branch that commit belongs to! I have never, ever had that problem with Perforce.
Git clients still have ways to go before they match the years of work Perforce has put into P4V. Most of what I mentioned above is achievable (apart from probably per directory permissions, which would require a change to git itself), but it will take time and resources to get there.