有一种简单的方法可以恢复整个P4更改列表吗?

时间:2008-12-01 18:37:04

标签: version-control perforce

假设我签了一个包含大量文件的更改列表(在Perforce中),我想恢复整个更改列表。是否有一种简单的方法可以一举“恢复”整个变更清单?

目前,我为更改列表中的每个文件执行类似的操作:

  • p4 sync // path / to / file #n(其中“n”是文件的先前版本)
  • cp文件#n
  • p4 sync // path / to / file
  • p4 edit // path / to / file
  • cp file #n file
  • rm file#n

您可以想象,对于大型更改列表而言,这非常麻烦。

6 个答案:

答案 0 :(得分:10)

发布的答案提供了正确的答案,但请注意P4V中有一个实际的菜单选项,现在就为您执行此操作。这是最新的2008.2测试版,所以应该在下周或者三周正式发布。

link提供了详细信息。

使用它应该比早期的答案简单得多,但我还没有机会亲自尝试。

更新现已全面发布。请参阅Perforce downloads

答案 1 :(得分:3)

This看起来很有趣。我个人没试过。

答案 2 :(得分:1)

Perforce的官方答案是http://kb.perforce.com/UserTasks/ManagingFile..Changelists/RevertingSub..Changelists,但程序并不比你建议的那么容易。 @ ya23建议的脚本看起来更好。

答案 3 :(得分:1)

出于某种原因,awk步骤对我不起作用。我使用模拟的Unix命令行工具从Windows环境运行。但是,以下方法确实有效:

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

以下是在Windows环境中获取Unix命令行工具的可能位置:

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

答案 4 :(得分:0)

当我想删除整个更改列表时,我遇到了同样的问题。所以我使用以下脚本(请注意,它还会删除更改列表的搁置和更改列表本身。如果您只想恢复,请复制相关行)。 另外,请确保sed适用于您的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

答案 5 :(得分:0)

当您想要恢复刚刚提交的整个更改列表(作为批量)时,问题就开始了,您需要开始快速恢复#n-1的文件(因为它的生产)......

想要支持ya23的答案 - 一个Python脚本的链接 - 它真的很容易使用(很容易错过他的评论)

你给它想要回滚的修订版,它会自动准备一切(每个文件的#n-1&合并以及所有内容)......你只需提交。