Initializing a Personal Server

This section describes how to start up a personal server, presenting two different approaches.

  1. The first approach initializes an empty server. Choose this if you want to work in isolation on a personal server, developing and possibly branching code, and versioning locally. See Run p4 init.
  2. The second approach copies content from another server to populate the newly initialized server with files and history; this is known as "cloning." This approach is best when working collectively on an existing project; users work on a set of project files that are managed on a shared server. The users make changes to the files on their personal server and then push the changes to a shared server. The shared server makes these changes available to other project users. At any given time, users can fetch the latest content from the shared server. See Run p4 clone.

Initialize an empty server

In this workflow, you invoke the p4 init command in your working directory to initialize a personal server and set it up with everything needed to start versioning files. Use this approach if you want to work in isolation on a personal server, developing and possibly branching code.

Read this first

In order to fetch from or push to a shared server, the case sensitivity of your personal server must match that of your shared server. When you run p4 init, Perforce attempts to set the case sensitivity of your personal server to match that of the shared server specified in your current P4PORT setting. If Perforce can’t discover a shared server, the p4 init command will fail. You must then run this command:

p4 init -Cx

where C0 sets the server to case-sensitive and C1 sets it to case-insensitive; set the option to match the case sensitivity of the shared server with which you’re communicating.

Similarly, in order to fetch from or push to a shared server, the Unicode support of your personal server must match that of the shared server. When you run p4 init, Perforce attempts to set the Unicode support of your personal server to match that of the shared server specified in your current P4PORT setting. If Perforce can’t discover a shared server, Unicode support defaults to off. If you later want to turn Unicode support on, you can run this command:

p4d -xi -r /users/username/dvcsdir/.p4root

Run p4 init

Here is the p4 init command syntax:

p4 [-u user] [-d dir] [-c client] init [-h -q] [-c stream] [-Cx] [-xi -n]

p4 init includes a number of command-line arguments:

  • To configure your personal server without Unicode support, pass the -n option.
  • To have Perforce create the personal server’s files in a directory other than the current directory, specify the directory with the -d option.
  • Use the -q option to suppress informational messages.
  • Use the -c [stream] option to create the specified stream as the mainline stream rather than the default //stream/main.

Directories and files

The p4 init command creates the following directories and files in the directory in which the command is invoked:

  • .p4root - A directory containing the database files that will contain the metadata about files checked into Perforce.
  • .p4ignore - A list of Perforce files Perforce shouldn’t add or reconcile.
  • .p4config - A file containing configuration parameters for the client-server connection.

In addition, the p4 init command does the following:

  • Creates a P4CLIENT workspace. Note that the client option allwrite is set by default, making files writable without the need to check them out with p4 edit first. You must, however, issue a p4 reconcile command before shelving or submitting files.
  • Creates a stream depot.
  • Creates an initial stream, called main.

Add files

At this point, you are ready to add files to your server. You can create them, copy them and then run p4 reconcile — or p4 rec for short — to mark all of your source files to be added to Perforce and then p4 submit to submit them. If you are new to Perforce, see the "Managing Files and Changelists" chapter of the P4 User’s Guide

Prepare to fetch and push content between servers

If you want to subsequently push your work to a shared server or fetch files from a shared server, you must create a remote spec with the p4 remote command. See “Fetching and Pushing” and “Understanding Remotes” for more information.