13

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

目前我对更改列表中的每个文件都执行以下操作:

  • p4 sync //path/to/file#n(其中“n”是文件的先前版本)
  • cp 文件文件#n
  • p4同步//路径/到/文件
  • p4 编辑//路径/到/文件
  • cp 文件#n 文件
  • rm文件#n

正如您可以想象的那样,这对于大型变更列表来说非常麻烦。

4

6 回答 6

8

发布的答案提供了正确的答案,但还要注意 P4V 中有一个实际的菜单选项现在可以为您执行此操作。它在最新的 2008.2 Beta 中,因此应该会在接下来的一周或三周内正式发布。

链接提供详细信息。

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

更新这现已完全发布。请参阅Perforce 下载

于 2008-12-01T22:22:54.600 回答
3

看起来很有趣。我没有亲自尝试过。

于 2008-12-01T19:01:40.577 回答
1

Perforce 的官方答案位于http://kb.perforce.com/UserTasks/ManagingFile..Changelists/RevertingSub..Changelists但该过程并不比您建议的要容易得多。@ya23 建议的脚本看起来更好。

于 2008-12-01T21:26:16.993 回答
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/

于 2014-11-19T18:50:14.470 回答
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
于 2014-03-03T11:02:57.780 回答
0

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

想要支持 ya23 的回答——Python 脚本的链接——它真的很容易使用(而且很容易错过他的评论)

你给它你想要回滚的修订,它会自动准备一切(每个文件的#n-1 & merging 和一切)......你只需提交。

于 2014-04-10T11:55:43.297 回答