I used Perforce for 5 years in my previous project. Now I've used git for half a year. At this time I think I can say with confidence that if I were to choose a free version control system, I would go with git, but if I had the money, I would choose Perforce.
Not necessarily because Perforce or the Perforce tools are superior, but the way I like to do software development, I would benefit more from Perforce.
So looking at just what really interests me, here are the differences, or rather the parts I really like in Perforce and miss from git to some extent.
- In development I prefer agile ways, in which I regard communication as the most important point - letting others know everything I do. A centralized VCS helps with that. In Perforce I can easily check others' commits, others' work-in-progress stuff, even when they are start working on something which interests me.
- Developers should not think too much about how to use a tool. Git needs constant mental work. Those mental energies should go into the software itself, not the version management.
- Commit messages are often made wrong. In git you are essentially not able to change an already pushed message.
- Developers need easy task organization - Perforce changesets provide a good and easy to use way.
- During pair programming everyone should work at his own desktop. Perforce shelves provide an easy way to share code.
- When someone leaves the office, he might not come the next day, due to some unplanned events, like getting ill, having an accident, or even having traffic problems. Shelving work in progress every day prevents the problems from these.
The arguments against perforce are mostly true, but in my experience, Perforce advantages overwhelm the disadvantages.
And this document from Perforce tends to be true.