假设我签了一个包含大量文件的更改列表(在Perforce中),我想恢复整个更改列表。是否有一种简单的方法可以一举“恢复”整个变更清单?
目前,我为更改列表中的每个文件执行类似的操作:
您可以想象,对于大型更改列表而言,这非常麻烦。
答案 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&合并以及所有内容)......你只需提交。