Perforce is a version control system. p4 is its primary commandline tool. p4g is its GUI tool. The reference for all this is the p4 command reference.
- To get help on any p4 command named foobar:
$ p4 help foobar
$ p4 depots
- To view info about your workspace:
$ p4 info
- To view all workspaces of all users:
$ p4 clients
- To view or change the specification of your current client:
$ p4 client
You typically use this command to add new branches or paths from the depot to your directory view.
- To sync all the latest branches and paths of your client from the depot:
$ p4 sync
- To list (and not actually sync) the unsynced files between workspace and depot:
$ p4 sync -n
- To sync only a specific directory or file use its depot path:
$ p4 sync //dev/foo/some.cpp
A changelist is similar to a commit in other version controls systems. The commit message is known as description in p4.
- To create a changelist with the currently open files:
$ p4 change
This opens your default editor to a temporary text file showing the changelist description (empty) and the list of files that will be added to the changelist. You can edit in the editor to add a description and optionally remove any of the files. Once you save the file, the changelist is created.
After a changelist is created, p4 prints out its changelist number, say 123456.
- To add a new file to an existing changelist 123456:
$ p4 reopen -c 123456 joe/foobar.cpp
- To edit the description of an existing changelist 123456:
$ p4 change -u 123456
- To view the description of a changelist:
$ p4 describe 123456
- To view all the details of an existing changelist 123456:
$ p4 change -o 123456
- To shelve a changelist 123456 in central repository:
$ p4 shelve -c 123456
- To update a shelved changelist 123456 with newly updated files from disk:
$ p4 shelve -f -c 123456
- To delete a shelved changelist 123456:
$ p4 shelve -d -c 123456
- To view all the changelists from the server:
$ p4 changes
This will list all changelists of everybody, so it is pretty much useless. You want to filter it down using other criteria, like shown below.
- To view all the changelists of a particular depot:
$ p4 changes //somedepot/
- To view all the changelists of a particular branch in a depot:
$ p4 changes //somedepot/somebranch/
- To view the most recent 5 changelists added to the server:
$ p4 changes -m5
- To view the changelists added by a particular user:
$ p4 changes -u joe
- By default, a single truncated line of information is shown for each changelist. To view a more detailed description of each changelist:
$ p4 changes -l
- To view the changelists of a particular status, say pending:
$ p4 changes -s pending
- To add a new file, either cause you want to create a new file or add an existing file to be tracked by version control:
$ p4 add foobar.txt
If it is a new file, then you will need to create the file yourself after this command. This command just indicates to p4 to start tracking such a file.
$ p4 delete foobar.txt
- To open a file for editing:
$ p4 edit foobar.txt
- To overwrite your local untracked changes to file by reverting to its version from depot:
$ p4 revert foobar.txt
- To revert back opened files if they are unchanged:
$ p4 revert -a
- To view the currently changed files as seen by p4:
$ p4 opened
You can think of this as similar to
$ To submit the open files as a changelist to depot:
$ p4 submit
This is a combination of creating a changelist and submitting it to the depot.
- To view the changelist of a file:
$ p4 changes //somedepot/somepath/foobar.txt
- To view the log of a file:
$ p4 filelog //somedepot/somepath/foobar.txt
$ p4 print //somedepot/somepath/foobar.txt
- To print the revision numbers of every line of a file:
$ p4 annotate //somedepot/somepath/foobar.txt
- To print changelists for every line of a file:
$ p4 annotate -c //somedepot/somepath/foobar.txt
- To print the user who last changed every line of a file:
$ p4 annotate -u //somedepot/somepath/foobar.txt
- To view the diff of all currently open files:
$ p4 diff
This prints a text diff at the shell by default. If you set the
P4DIFF environment variable to a GUI program, like Meld, it will use that to show the diffs.
- To view the diff of opened files that are actually changed:
$ p4 diff -sa
- To diff two files in the depot:
$ p4 diff2 //branch1/some.cpp //branch2/some.cpp
This prints a diff at the shell. Set the
P4DIFF2 environment variable to a GUI diff program to view the diff using that.
To create a new branch from an old branch, there are typically 3 steps:
First, create the branch:
$ p4 integrate //foo/old_branch/... //foo/new_branch/...
Now the branch is created, but you cannot yet view the files in the new branch in your filesystem.
Second, change the client specification add the new branch files to your view and sync:
$ p4 client
$ p4 sync
Finally, submit the new branch to depot:
$ p4 submit //foo/new_branch/...