Is there an easy way to revert an entire P4 changelist?

安稳与你 提交于 2020-01-01 04:17:11

问题


Let's say I checked in a changelist (in Perforce) with lots of files and I'd like to revert the entire changelist. Is there an easy way to "revert" the entire changelist in one fell swoop?

Currently I do something like this for each file in the changelist:

  • p4 sync //path/to/file#n (where "n" is the previous version of the file)
  • cp file file#n
  • p4 sync //path/to/file
  • p4 edit //path/to/file
  • cp file#n file
  • rm file#n

As you can imagine, this is quite cumbersome for a large changelist.


回答1:


The posted answers provide correct answers, but note also that there is an actual menu option in P4V to do this for you now. It's in the latest 2008.2 Beta, and so should be officially released the the next week or three.

This link gives details.

It should be a lot simpler to use than the earlier answers, but I've not had the opportunity to try it myself yet.

Update This has now been fully released. See Perforce downloads.




回答2:


This looks interesting. I haven't tried it personally.




回答3:


The official answer from Perforce is at http://kb.perforce.com/UserTasks/ManagingFile..Changelists/RevertingSub..Changelists but the procedure is not all that much easier than the one you suggest. The script suggested by @ya23 looks better.




回答4:


For some reason, the awk step does not work for me. I'm running from a Windows environment with emulated Unix command line tools. However, the following does work:

p4 describe -s [changelist_number] | grep // | sed "s/\.\.\. //" | sed "s/#.*//"  | p4 -ztag -x - where | grep "... path " | sed "s/\.\.\. path //"

Here are possible locations to get Unix command line tools in a Windows environment:

http://sourceforge.net/projects/getgnuwin32/?source=typ_redirect http://unxutils.sourceforge.net/




回答5:


I have the same problem when I want to delete an entire changelist. so I use the following script (notice that it also deletes the changelist's shelve and the changelist itself. if you only want to revert, copy the relevant lines). Also, make sure the sed applies to your version of p4.

#!/bin/bash

set -e

if [[ $# -ne 1 ]]; then
echo "usage: $(basename $0) changelist"
    exit 1
fi

CHANGELIST=$1

#make sure changelist exist.
p4 describe -s $CHANGELIST > /dev/null # set -e will exit automatically if fails

p4 shelve -d -c $CHANGELIST 2> /dev/null || true # changelist can be shelveless
files_to_revert=$(p4 opened 2> /dev/null | grep "change $CHANGELIST" | sed "s/#.*//g")
if [[ -n "$files_to_revert" ]]; then
    p4 revert $files_to_revert
fi
p4 change -d $CHANGELIST



回答6:


The problem starts when you want to revert an entire changelist ( as a bulk ) that you've just submitted, and you need to start reverting files of #n-1 one by one fast ( because it's production ) ...

Wanted to support ya23's answer- the link of a Python script - it's really really easy to use ( and really easy to miss his comment )

You give it the revision you want to rollback, and it prepares everything automatically ( each file's #n-1 & merging and everything ) ... you just submit.



来源:https://stackoverflow.com/questions/331758/is-there-an-easy-way-to-revert-an-entire-p4-changelist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!