比方说,我检查了一个包含大量文件的更改列表(在Perforce中),我想恢复整个更改列表。有一种简单的方法可以一举“恢复”整个变更表吗?有没有简单的方法来恢复整个P4更改列表?
目前,我做这样的事情在改变列表的每个文件:
- P4同步//路径/到/文件#n(其中“n”是该文件的以前版本)
- CP文件文件#n的
- P4同步//路径/到/文件
- P4编辑//路径/到/文件
- CP文件#n的文件
- RM文件#n的
正如您可以想象的,这对于大型更改列表来说非常麻烦。
比方说,我检查了一个包含大量文件的更改列表(在Perforce中),我想恢复整个更改列表。有一种简单的方法可以一举“恢复”整个变更表吗?有没有简单的方法来恢复整个P4更改列表?
目前,我做这样的事情在改变列表的每个文件:
正如您可以想象的,这对于大型更改列表来说非常麻烦。
发布的答案提供了正确的答案,但是请注意,P4V中还有一个实际的菜单选项可供您现在执行此操作。它是最新的2008.2 Beta版,所以应该在下周或三周正式发布。
这个link给出了细节。
使用比以前的答案要简单得多,但我还没有机会自己尝试。
更新这现在已经完全发布。请参阅Perforce downloads。
This看起来很有趣。我没有亲自尝试过。
Perforce的官方回答是http://kb.perforce.com/UserTasks/ManagingFile..Changelists/RevertingSub..Changelists,但程序并不比您建议的要容易得多。 @ ya23建议的脚本看起来更好。
是的, “编辑”它更简单,但一旦你在那里添加和删除,手动操作会变得棘手。 – 2008-12-02 02:51:11
我想要删除整个更改列表时遇到同样的问题。所以我使用下面的脚本(注意,它也会删除更改列表的搁架和更改列表本身,如果只想恢复,请复制相关行)。 另外,请确保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
当你想恢复一个完整的修改列表(作为主体)的问题开始你刚刚提交,你需要一个快速的(因为它的生产开始恢复的#N-1一个文件)...
想支持ya23的答案 - 一个Python脚本的链接 - 它真的很容易使用(,真的很容易错过他的评论)
你给它要回滚的修订,并自动准备一切(每个文件的#n-1 &合并和所有内容)......您只需提交。
出于某种原因,awk步骤不适用于我。我使用模拟的Unix命令行工具从Windows环境运行。但是,下面做工作:
p4 describe -s [changelist_number] | grep // | sed "s/\.\.\. //" | sed "s/#.*//" | p4 -ztag -x - where | grep "... path " | sed "s/\.\.\. path //"
这里有可能的位置得到的Unix命令行工具在Windows环境中:
http://sourceforge.net/projects/getgnuwin32/?source=typ_redirect http://unxutils.sourceforge.net/
谢谢 - 我只是想它和它的工作太棒了!虽然我无法在我的Mac上运行P4V集成,但通过命令行运行脚本仍然正常。 – 2008-12-01 19:25:30
如果您链接的博客文章出现故障,请直接链接到Google代码中的脚本:http://code.google.com/p/p4scripts/source/browse/trunk/src/p4revert.py – 2008-12-01 19:26:02
,请注意:python脚本(当前)以DOS格式保存,因此您需要将其转换为unix行结尾,以便在基于unix的系统(如linux和OS X)上正常工作。 – 2008-12-01 19:27:41