Introduction

This release of the Perforce Server introduces distributed versioning.

A distributed version control architecture gives users access to an entire repository of archived content — and changes to that content — from a personal server ("local server") on their local machine. This means that the entire history of a file is contained on each user’s personal server. A user can manage versioned content without interacting with any other Perforce server unless desired. A user can also rewrite and revise history to discard unwanted intermediate information. In general, the distributed model allows users to work more experimentally, to try out changes and branch new streams, without fear of interfering with others' work.

Perforce distributed versioning functionality also provides a collaborative workflow, via shared servers ("remote servers"); these are classic Perforce servers that allow users to share their work with each other. In this model, users can work disconnected from the network and the shared servers until they’re ready to copy content to or from the shared servers. Moreover, unlike other version control systems such as git, users can copy a subset of the shared server content to their personal server, rather than the entire shared server repository. In this "hub and spoke" model, the shared server becomes the center of communication for the surrounding personal servers.

This release also allows synchronization of content across multiple offices or teams. This might happen using the new p4 fetch and p4 push commands if the servers are networked or the new p4 zip and p4 unzip commands if they’re not. Synchronization of content across sites is covered in the "Administering Perforce: Superuser Tasks" chapter of the Perforce System Administrator’s Guide: Fundamentals.

This book, Using Perforce for Distributed Versioning, covers the following topics:

  • Starting up a personal server — either empty or populated with files
  • Fetching and pushing files between servers
  • Branching
  • Understanding remotes
  • Rewriting history
  • Mapping of Git commands to Perforce commands