Store files (or a stream spec) from a pending changelist in the depot, without submitting them.
p4 [g-opts] shelve [-As] [-p]
p4 [g-opts] shelve [-Af] [-p] [FileSpec]
p4 [g-opts] shelve [-Af | -As] [-a option] [-p] -i [-f | -r]
p4 [g-opts] shelve [-Af | -As] [-a option] [-p] -r -c changelist#
p4 [g-opts] shelve [-As] [-a option] [-p] -c changelist# [-f]
p4 [g-opts] shelve [-Af] [-a option] [-p] -c changelist# [-f] [FileSpec]
p4 [g-opts] shelve [-As] -d -c changelist# [-f] --parallel=threads=N[,batch=N][,min=N]
p4 [g-opts] shelve [-Af] -d -c changelist# [-f] [FileSpec] --parallel=threads=N[,batch=N][,min=N]
Shelving is the process of temporarily storing work in progress in Helix Server without submitting a changelist. Shelving is useful when you need to:
- perform multiple development tasks on the same set of files, such as testing across multiple platforms
- share files for code review before committing your work to the depot
p4 shelve command creates, modifies, or discards
shelved files in a pending changelist. Shelved files persist in the depot
until they are discarded (by means of
p4 shelve -d)
or replaced by subsequent
p4 shelve commands.
p4 shelve displays the working revision for the files
In addition to the files being shelved,
also shelves any open stream specification. For open
stream specifications, see
After shelving files, you can:
- revert or modify them in your client workspace
- restore the shelved versions of those files to
your workspace with the
While files are shelved, other users can unshelve the shelved files into their own workspaces, or into other client workspaces.
If you are working in a multi-server environment, use the
option to promote a shelved change from an edge server to a commit server
where it can be accessed by other edge servers in the multi-server
configuration. When an existing shelved change is promoted, it is
promoted without modification unless the
-r options are also used to change the shelved file content.
and "Promoting shelved changelists" in
Helix Core Server Administrator Guide.
If no arguments are specified,
p4 shelve creates a
new changelist, adds files from the user’s default changelist, and (after
the user completes a form similar to that used by
p4 submit), shelves the
specified files into the depot. If a FileSpec is given,
shelve shelves only the files that match the FileSpec.
To add a file to a pre-existing shelve, the file must first be opened in the shelve’s changelist.
To move an
opened file from one changelist to another, use the
p4 reopen command.
p4 obliterate myfile does not obliterate a shelve of the file (archive or metadata). When you attempt to unshelve a file that has been obliterated, you will get an error. To recover the content of that file, print the file. To get rid of the shelve, delete the shelf.
When you create a shelf from files opened in the default changelist, the syntax of [FileSpec] means a single file pattern, such as:
p4 shelve ....html
(Note that wildcards are allowed to specify multiple files.)
However, when opened files are in a numbered change, multiple file arguments are possible:
p4 shelve -c 12108 ....html "*.c"
By default, if the stream spec is open, it will also be included with any shelved changelist. See the command line output of p4 help streamcmds
By default, a stream spec is not deleted until all files have been deleted.
Any new file being shelved that has the same content as an existing shelved file now refers to the existing archive file instead of creating a duplicate archive file. To avoid overwriting the content of shelves that share archives, the archives of the new shelved files now have an additional numerical suffix. For example,
1.1.1.gz instead of
To enable parallel shelving, set the net.parallel.max
configurable to a value greater than
Specifies that only files be shelved with this changelist.
Specifies that only an opened stream specification be shelved with this changelist. By default, if the stream spec is open and neither -Af nor -As is given, the stream specification is included with any shelved files. (See p4 help streamcmds)
Specify the pending changelist in which shelved files are to be created, discarded, or modified.
Only the user and client that owns the pending
changelist can add or modify its shelved files. (Administrators
Any files specified by a file pattern must already be open in
the specified changelist. To move
an opened file from one changelist to another, use
Using -d -c flag deletes the shelved files in the specified changelist so that
they are no longer available for
If the shelved changelist includes a stream spec, by default it is deleted when all files have been deleted.
The combinate of -d -As forces the the stream spec to be deleted even if files remain.
To force an overwrite any existing shelved files in a pending changelist, use the -f option with the -c or -i option.
Force the overwriting of any existing shelved files in a pending changelist with the contents of their client workspace copies.
administrators can use this option with
Reads the pending changelist specification with shelved files from the standard input. The user's editor is not invoked. To modify an existing changelist with shelved files, specify the changelist number using the -c option.
Promote a shelved change from an edge server to a commit server where it can be accessed by other edge servers participating in the multi-server configuration. Once a shelved change has been promoted, all subsequent local modifications to the shelf are also pushed to the commit server and remain until the shelf is deleted. See Usage Notes.
The combination of -p -c promotes the shelf without modification unless -f or -r are also used to update the shelved files before promotion.
Replace all shelved files in the changelist with the files that are opened in your workspace.
Specifies that multiple files should be transferred in parallel, using independent network connections from automatically-invoked child processes. See also the configurables net.parallel.shelve.batch, net.parallel.shelve.min, and net.parallel.shelve.threads.
See Global options.
|Can File Arguments Use Revision Specifier?||Can File Arguments Use Revision Range?||Minimal Access Level Required|
If the user doesn't have open access for all the files in the shelve command, the shelve command fails.
A promoted shelf is a shelf that exists on the commit server of a multi-server configuration because:
it was directly created on the commit server, or
it was promoted from the edge server with the
-poption of the
p4 shelvecommand, or
Commands that access shelves know how to handle promoted shelves.
To unpromote a shelf, delete the shelf and create a new one.
A shelf can be promoted when it’s first created. A normal shelf can be promoted after it is created by running one of the following commands:
$ p4 shelve -p -f -c myChange $ p4 shelve -p -r -c myChange
Promoting a shelf gives you a way to move a shelf from one Server to another. To do this, you must complete the following steps:
- Promote the shelf you want to copy on the Server from where you want to copy it, say Server X.
- Unshelve the shelf in the Server to which you want to copy it, say Server Y.
- Shelve the change on Server Y. This opens the files in a change that is owned by Server Y. The new shelf is created as a non-promoted shelf; but you can promote it if you like.
To determine whether a shelved change is promoted, you can try to access
the shelf on a Server other than the Server that owns the change, or you
can look at the output of the
Observe the following limitations when working with promoted shelves:
- You can’t unload an Edge server workspace if you have promoted shelves.
- Use promoted shelves sparingly. Shelf promotion and shelf access are time-consuming operations.
p4 shelve -s 65
Shelve the entire shelve at the specified changelist number.
p4 shelve -s 65 -As
Shelve only the stream spec.
p4 shelve -s 65 -Af a1/...
Shelve only the files that match the filespec.
To restore shelved files into a workspace