3.Â Clients

Perforce provides access to the
repository and tracks state on a per-client basis. In
Perforce terms, a client is a
specification that maps files and directories from the
repository to the local machine. Each user can have multiple
clients, and each client can access different or overlapping
parts of the repository. The client also specifies the root
directory of the file tree that it maps, and it specifies the
machine that the tree lives on. Thus, working on multiple
machines requires that multiple clients be used.

Clients may be accessed via p4 client.
Running this command with no arguments will bring up a client
template in an editor, allowing you to create a new client for
your work. The important fields in this template are explained
below:

Client:

This is the name of the client spec. It can be
anything you want, but it must be unique within the
Perforce server. A naming
convention that is commonly used is
username_machinename,
which makes it easy to identify clients when browsing
them. A default name will be filled in that is just the
machine name.

Description:

This can contain a simple text description to help
identify the client.

Root:

This is the local directory that will serve as the
root directory of all the files in the client mapping.
This should be a unique location in your filesystem that
does not overlap with other files or
Perforce clients.

Options:

Most of the default options are fine, though it is
usually a good idea to make sure that the
compress and rmdir
options are present and do not have a
no prefix on them. Details about each
option are in the Perforce
docs.

LineEnd:

This handles CR-LF conversions and should be left to
the default unless you have special needs for it.

View:

This is where the server-to-local file mappings go.
The default is

//depot/... //client/...

This will map the entire
Perforce repository to the
Root directory of your client.
DO NOT USE THIS DEFAULT! The FreeBSD
repo is huge, and trying to map and sync it all will take
an enormous amount of resources. Instead, only map the
section of the repo that you intend to work on. For
example, there is the smpng project tree at
//depot/projects/smpng. A mapping
for this might look like:

//depot/projects/smpng/... //client/...

The ... should be taken literally.
It is a Perforce idiom for
saying “this directory and all files and directories
below it.”

A Perforce “view” can contain multiple
mappings. Say you want to map in both the SMPng tree and
the NFS tree. Your View might look like:

Views are a tricky part of the learning experience
with Perforce, so do not be
afraid to ask questions.

Existing clients can be listed via p4
clients. They can be viewed without being modified
via p4 client -o
clientname.

Whenever you are interacting with files in
Perforce, the P4CLIENT
environment variable must be set to the name of the client that
you are using, like so:

%export P4CLIENT=myclientname

Note that client mappings in the repository are not
exclusive; multiple clients can map in the same part of the
repository. This allows multiple people to access and modify
the same parts of the repository, allowing a team of people to
work together on the same code.