p4 sync
Update the client workspace to reflect the contents of the depot.
Syntax
p4 [g-opts] sync [-E -f -L -n -N -k -K -q -r] [-m max] 
                 [--parallel=threads=N[,batch=N][,batchsize=N][,min=N][,minsize=N]]
                 [--use-stream-change=N] [file[revRange] ...] 
p4 [g-opts] sync [-E -L -n -N -K -q -s] [-m max] [--use-stream-change=N]
                 [--parallel=threads=N[,batch=N][,batchsize=N][,min=N][,minsize=N]]
                 [file[revRange] ...] 
p4 [g-opts] sync [-E -L -n -N -K -p -q] [-m max] [--use-stream-change=N]
                 [--parallel=threads=N[,batch=N][,batchsize=N][,min=N][,minsize=N]]
                 [file[revRange] ...]
                                            
                                            Description
p4 sync brings the client workspace into sync with the depot by copying files matching its file pattern arguments from the depot to the client workspace.
When no file patterns are specified on the
      command line, p4 sync copies a particular depot file
      if it meets all three criteria:
- Visible through the client view.
- Not already opened by p4 edit,p4 delete,p4 add, orp4 integrate.
- Does not already exist in the client workspace at its latest revision, that is, the head revision.
In new, empty workspaces, all depot files meet the last two criteria, so all the files visible through the workspace view are copied into the user’s workspace.
If file patterns are specified on the command line, only those files that match the file patterns and that meet the above criteria are copied.
If the file pattern contains a revision specifier, the specified revision is copied into the client workspace.
If the file argument includes a revision range, only files included in
      the revision range are updated, and the highest revision in the range is
      used. Files that are no longer in the workspace view are not affected if
      the file argument includes a revision range. See File specifications on "Using revision ranges", and p4 archive "Usage Notes", and p4 help
	  revisions. 
The p4 sync command gets the latest version from the depot and updates your local workspace files. However, to protect the person working in the local workspace from accidentally losing work, any files that are open in the local workspace when you run p4
	  sync need to be manually resolved using the p4 resolve command before submitting.
For DVCS
For users of P4 Server for Distributed Versioning (DVCS), when specifying file paths, you can use the global changelist ID from the submitted change spec instead of the actual change number. For example:
p4 sync //depot/...@30E7C829-08C504-4109-89AA-904D0C2194B8
To learn more, see the P4 for Distributed Versioning Documentation topic on global changelist IDs, "Track a changelist’s identity from server to server".
Options
| 
 | Force the sync. P4 Server performs the sync even if the client workspace already has the file at the specified revision. If the file is writable, it is overwritten. This option does not affect open files, but it does
	      override the  | |||||||||||||
| 
 | For scripting purposes, perform the sync on a list of valid file arguments in full depot syntax with a valid revision number. When this flag is used, the arguments are processed together by building an internal table similar to a label. This file list processing is significantly faster than having to call the internal query engine for each individual file argument. However, the file argument syntax is strict and the command will not run if an error is encountered. | |||||||||||||
| 
 | Preview mode: Display the results of the sync without actually performing the sync. | |||||||||||||
| 
 | Preview mode: Display a summary of the expected network traffic associated with a sync, without performing the sync. This tells you how many files are to be added or updated, which is useful if there are many large files, limits on bandwidth, or limits on disk space. This option is useful for estimating network impact of a sync before attempting to perform the sync. If you’ve recently updated your client workspace view, it’s useful to know if you have inadvertently included a folder tree that holds several gigabytes of assets before attempting to sync your newly-configured workspace. | |||||||||||||
| 
 | Update server metadata without syncing files. It is intended to enable you to ensure that the server correctly reflects the state of files in the workspace while avoiding a large data transfer. An erroneous update can cause the server to incorrectly reflect the state of the workspace. Keep existing workspace files and update the have list An internal list indicates which files and revisions the client workspace has sync'd from the depot. See 'p4 have' in P4 CLI Reference. without
updating the client workspace.  Use  p4 sync -k is an alias for  If your administrator has set the  | |||||||||||||
| -K | Suppress keyword expansion
        when updating +ktype files on the client. To learn more, see File type modifiers. | |||||||||||||
| 
 | Populate a client workspace, but do not update the have list. Any file that is already synced or opened is bypassed with a warning message. This option is typically used for workspaces used in processes (such as certain build or publication environments) where there is no need to track the state of the workspace after it has first been synced. If you are at a replica, and syncing from the replica's depot to your replica workspace, the sync command will fail if the master is not available. This is because the replica needs to be able to update the db.have table on the master. However, in this case, you can use p4 sync -p | |||||||||||||
| 
 | Quiet operation: suppress normal output messages. Messages describing errors or exceptional conditions are not suppressed. | |||||||||||||
| 
 | Reopen files that are mapped to new locations in the depot, in the new location. By default, open workspace files remain associated with the depot files that they were originally opened as. For example, pending work can be moved to a different stream by
	      running  | |||||||||||||
| 
 | Safe sync: Compare the content in your client workspace against what was last synced. If the file was modified outside of the control of P4 Server, an error message is displayed and the file is not overwritten. If your client workspace specification has both the
	       | |||||||||||||
| 
 | Sync only the first  | |||||||||||||
| -E 
 | For edge servers replicating from a commit or an upstream edge: 
 | |||||||||||||
| 
 | Specify options for parallel file transfer. The configurable  
 See Parallel processing. | |||||||||||||
| --use-stream-change | Specify the stream specification version to use for generating the client view for sync. If  
 
 
 | |||||||||||||
| 
 | See Global options. | |||||||||||||
Usage Notes
| Can File Arguments Use Revision Specifier? | Can File Arguments Use Revision Range? | Minimal Access Level Required | Command Alias | 
|---|---|---|---|
| Yes | Yes | 
 | p4 sync -k is an alias for p4 flush
 | 
- 
                                                    If the client workspace view has changed since the last sync, the next sync removes from the client workspace those files that are no longer visible through the workspace view (unless a revision range is used), and copies into the client workspace those depot files that were not previously visible. By default, any empty directories in the workspace are cleared of files, but the directories themselves are not deleted. To remove empty directories upon syncing, turn on the rmdiroption in thep4 clientform.
- 
                                                    If a user has made certain files writable by using OS commands outside of P4 Server’s control, p4 syncwill not normally overwrite those files. However, if theclobberoption in thep4 clientform has been turned on, these files will be overwritten.You can prevent this behavior (at a minor cost in performance) by using the -s"safe sync" option. Even if theclobberoption is set,p4 sync -swill not overwrite files modified outside of P4 Server control.
- A progress indicator is available for p4 syncif you request it withp4 -I sync -q.
- Do NOT issue a p4 syncwith multiple arguments referencing the same file. For example:p4 sync depot/project/...@1000 //depot/project/file.txt@1010will result in unpredictable, inconsistent revisions.
Scripting
The -m max option is useful when combined with the
      -n option for efficient scripting. For example, a command
      like p4 sync -n -m 1 does not sync any files, but
      displays only one line of output if there are any files to be synced, or
      a message indicating that the workspace is up to date. Without the
      -m 1 option, the output could be thousands of
      lines long, all of which would be discarded.
The -L option is intended for use by scripts or automated
      reporting processes. File arguments must be in full depot syntax, and
      have a valid revision number. File specifications that do not meet these
      requirements are silently ignored. Using this option speeds up file list
      processing.
Parallel processing
Depending on the number of files being transferred, the p4
	  sync command might take a long time to execute. You can
      speed up processing by having this command transfer files using multiple
      threads. Parallel processing is most effective: 
- with long-haul, high latency networks
- if the network configuration prevents making full use of the available bandwidth with a single TCP flow
- when working with large, compressed binary files, where the client must perform substantial work to decompress the file
Do one of the following:
- Enable automatic parallel sync by setting both net.parallel.threadsandnet.parallel.max.- For example,  if you configure net.parallel.max=40andnet.parallel.threads=3, thep4 synccommand automatically uses 3 threads.
 
- For example,  if you configure 
- Manually invoke parallel sync by not setting net.parallel.threads, settingnet.parallel.maxto a value greater than1, and using the--paralleloption to thep4 synccommand.- For example, if net.parallel.threadsis unset, andnet.parallel.max=40, the number of parallel threads can be anywhere within the range of2to40. To run 12 threads in parallel, type at the command linep4 sync --parallel=threads=12
 Thenet.parallel.maxconfiguration variable can be set to any value between0and100. A value of0or1disables parallel processing. A value greater than1enables parallel processing up to the specified level.If net.parallel.max=40, the value ofnet.parallel.threadsshould be less than or equal to40. If the requested number of parallel threads exceeds the value set fornet.parallel.max, only the maximum number of allowed threads run.
- For example, if 
- 
                                                    The --paralleloption allows you to specify how the parallel processing occurs.- Use the minand/orminsizesuboptions to indicate that you don’t want parallel processing unless the sync involves sending at leastminnumber of files, and/or at leastminsizenumber of bytes.
- Use the batchand/orbatchsizesuboptions to specify how many files or bytes should be taken at a time. Setting a small batch size might result in the best use of the network, but at the risk of overloading database resources.
 You can specify the suboptions in any order. 
- Use the 
You can also control parallel processing behavior by using:
- net.parallel.batch
- net.parallel.batchsize
- net.parallel.min
- net.parallel.minsize
- net.parallel.threads
- net.parallel.sync.svrthreads
- client.sendq.dir
Working with streams
If both of the following are true:
- the Streamfield in your client workspace is set to a valid stream
-  the StreamAtChangefield points to a specific changelist number
the command, p4 sync, syncs your workspace to the revisions of files available as of that changelist.
Retrying the command
Over unreliable networks, you can specify the number of retries to
      attempt and the length of time beyond which the
      P4 Server
      application assumes that the network has timed out. Set
      net.maxwait in your workspace’s P4CONFIG file or on a one-command
      basis from the command line, and specify the number of retries with
      -r n, where n is the number of times to
      attempt reconnection.
This command attempts to sync the user’s workspace, making up to three attempts to resume the sync if interrupted:
p4 -r3 -vnet.maxwait=60 sync
                                            The command fails after the third 60-second timeout.
 Avoid the use of
      -r on any command that reads from standard input. The format of the output of a command that times out and is
      restarted cannot be guaranteed. For example, network connectivity might
      break in the middle of a line of output.
Background transfer from edge to commit
A p4 sync command that is running on a commit server for a file revision that was submitted from an edge server might return a librarian The librarian subsystem of the server stores, manages, and provides the archive files to other subsystems of the server. error message. This can occur if the background file transfer from the edge to the commit has not yet completed. To make the sync operation on the commit server wait for the file transfer to be completed, set the submit.allowbgtransfer configurable:
p4 configure set commit-server-ID#submit.allowbgtransfer=1
                                            
Examples
| 
 | Copy the latest revision of all files from the depot to the client workspace, as mapped through the client view. If the file is already open in the client workspace, or if the latest revision of the file exists in the client workspace, it is not copied. | 
| 
 | Copy the fourth revision of  | 
| 
 | Copy all the files under the  Don’t copy the latest revision; use the revision of the file in the depot after changelist 21 was submitted. | 
| 
 | If  Files listed in  Files not listed in  | 
| 
 | Bring the workspace into sync with a label as with  (The revision range
	       | 
| 
 | Bring the workspace into sync with the depot as of midnight, June 24, 2018. (That is, include all changes made during June 23.) | 
| 
 | Sync a filename containing a
	      P4 Server
	      wildcard by using the ASCII expression of the character’s
	      hexadecimal value. In this case, the file in the client workspace
	      is  For details, see Limitations on characters in filenames and entities. | 
| 
 or 
 | Sync to the nonexistent revision of  | 
| 
 or 
 | Sync to the nonexistent revision of all files so that all files in the workspace (that are under P4 Server control) are removed. | 
Related commands
| To open a file in a client workspace and list it in a changelist | |
| To copy changes to files in the client workspace to the depot | |
| To view a list of files and revisions that have been synced to the client workspace |