How to see files checked out at specific revisions? - perforce

Say I've synced Perforce to a changelist, but a specific file to a specific revision other than the one in the changelist:
$ p4 sync //depot/...#500 //depot/main/Foo/bar.txt#42
What command can I run to tell me that Foo/Bar.txt is synced to a different revision than the one specified by the changelist?

p4 sync -n //depot/...#500
Files that are already synced to #500 won't report anything, but for Foo/bar.txt you'll get an "updating" message because it's at a different revision.
Another approach would be:
p4 diff2 -q //depot/...#500 //depot/...#have
Again, this is just comparing #500 vs what you have synced; most of your files will be identical and report no output, but Foo/bar.txt will show up as a diff.

Related

P4V - remove identic files but with different history from changelist

I shelved files from another branch and unshelved them in the current branch. The problem is that now I have around 1500 files in the changelist and I want to remove the files that are identical between the branches. I've tried with Revert Unchanged Files and it reverts 0 files, but when I individually diff them I get the message that they are identical.
So, how can I remove them from the changelist if they are identical to the current version.
I don't think P4V has an equivalent to this, but this is a one-liner at the command line:
p4 diff -sr | p4 -x - revert
In P4V you can "open command prompt" to get a command prompt that already has the P4 client settings configured correctly; then just copy and paste the above.

How to download only the files modified in a changelist with perforce

How do i download only the set of files that are modified in a changelist. I was able to find the list of files modified with p4 describe.
To sync them to your workspace, do:
p4 sync #=CHANGE
If you want to download them to arbitrary locations and/or stdout, see the p4 print command.

Sync ONLY the differences in the depot but recieving error "- must refer to client"

I want to be able to sync ONLY the differences in the depot into my workspace.
I do not want to re-sync all the source files which already match.
I currently can see the difference with this command:
p4 diff -sd //depot/source/...
But when trying to use this command to sync the depot differences to my local workspace:
p4 diff -sd //depot/source/... | p4 -x - sync -f | p4 //depot/source/...
I receive this message in the terminal:
"- must refer to client"
Note: Prior to performing all of the above command I set my client using
p4 set P4CLIENT=MYWORKSPACE
To sync only the files that have been updated on the server since you last synced, do:
p4 sync
The default behavior of the p4 sync command is to sync only changed files; you don't need to perform any special gyrations to make that happen.
The server's notion of what's different between the server and your workspace is dependent on its records of what it sent you the last time you synced. If you've messed around with your workspace in unsupported ways (i.e. you've modified files that Perforce made read-only without "opening" them for modification), those records have been invalidated. You can fix this one of two ways, depending on what you want to do with your modifications:
p4 reconcile
will open the files you modified, allowing you to choose between reverting the modifications or submitting them.
p4 clean
will simply overwrite your modifications, similar to a p4 sync -f, but p4 clean will do a diff to figure out which files you modified and will only re-sync those files.

how to sync the perforce client only with the files of a particular change list using p4 sync command

I'm trying to sync only the files modified in a particular change list to p4v.
Suppose in a perforce directory //demo/test I have 10 files out of which only 3 are modified as part of change list number 1234. I want only 3 files to be synced up. I have tried below options but it did not work.
p4 sync //demo/test...#1234;
This command says the files are updated but i don't see the files synced up.
p4 sync -f //demo/test...#1234;
This command is syncing all 10 files in the directory.
Use
p4 sync //demo/test...#1234,1234
or
p4 sync //demo/test...#=1234
When running tests like these, remember that 'p4 sync' won't sync a file that you already have, which is why you found the need to run 'p4 sync -f' to force the files to be sent even though the server knows you already have them. If you want to clear the server's memory of the files that you have, you can run
p4 sync //demo/test...#none
which will remove all the (p4-managed) files matching '//demo/test...' from your workspace, and then 'p4 sync' will bring them back the next time.
Oh, and since 'test' is a directory, the pattern
//demo/test/...
is preferred to
//demo/test...
since '//demo/test/...' matches only the files in the test directory, while '//demo/test...' will also match the files in the '//demo/test1', '//demo/test-and-set', and '//demo/testarossa' directories (if those should happen to exist).

How to revert file but leave it in pending changelist?

In Perforce P4V I have a file in a pending changelist. I want to revert the contents of the file but keep the file in the changelist. How can I do that?
I tried Perforce's revert command but that removes the file from the changelist.
The only way to accomplish this (short of copy/pasting the original contents back into this file, but that seems silly) is to revert and reopen it. Shelving, by itself, does not revert the file. The concept of "shelve and revert" is still two operations.
This is not readily possible, as other respondents noted.
If you are okay with a multi-step solution, you could
Right-click the file in the changelist and choose "diff against have revision".
In the diff window, under "Edit" choose "Edit right/left pane" (whichever side yours is
on).
Copy the contents of the original and paste them over your edited workspace version
Save the file.
Your file now has no changes, and it is checked out in the same changelist.
Using the command line, it can be done in three stages. If you are using windows I highly recommend having a unix environment, e.g. cygwin (which is the one I used.)
Assume your changelist number is XYZ and you have shelved the files in their current revision (just for the sake of it!)
Step 1: get a list of files and put them in a temp file.
p4 describe XYZ | grep \/\/ | sed -e 's/\.\.\. //'| sed 's/#.*//' > temp
Step 2: revert all the files in the changelist
p4 revert -c XYZ //...
Step 3: check out / edit the files again
cat temp | xargs p4 edit -c XYZ
I assumed all the files are in edit mode (i.e. not an already opened file or a deleted file).
PS : delete temp, if you are fussy :)
I don't believe this can be done, even from the command line, since p4 sync (even with -f) explicitly excludes operations on open files.
The feature you're looking for is shelving. This will revert the file, but keep a shelved version in the changelist, which you (or someone else on a different client) can unshelve later.

Resources