假设我签入了包含大量文件的更改列表(在 Perforce 中),并且我想恢复整个更改列表。有没有一种简单的方法可以一举“恢复”整个变更列表?
目前我对更改列表中的每个文件都执行以下操作:
- p4 sync //path/to/file#n(其中“n”是文件的先前版本)
- cp 文件文件#n
- p4同步//路径/到/文件
- p4 编辑//路径/到/文件
- cp 文件#n 文件
- rm文件#n
正如您可以想象的那样,这对于大型变更列表来说非常麻烦。
假设我签入了包含大量文件的更改列表(在 Perforce 中),并且我想恢复整个更改列表。有没有一种简单的方法可以一举“恢复”整个变更列表?
目前我对更改列表中的每个文件都执行以下操作:
正如您可以想象的那样,这对于大型变更列表来说非常麻烦。
发布的答案提供了正确的答案,但还要注意 P4V 中有一个实际的菜单选项现在可以为您执行此操作。它在最新的 2008.2 Beta 中,因此应该会在接下来的一周或三周内正式发布。
此链接提供详细信息。
它应该比之前的答案简单得多,但我还没有机会亲自尝试。
更新这现已完全发布。请参阅Perforce 下载。
这看起来很有趣。我没有亲自尝试过。
Perforce 的官方答案位于http://kb.perforce.com/UserTasks/ManagingFile..Changelists/RevertingSub..Changelists但该过程并不比您建议的要容易得多。@ya23 建议的脚本看起来更好。
出于某种原因,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/
当我想删除整个更改列表时,我遇到了同样的问题。所以我使用以下脚本(请注意,它还会删除更改列表的搁置和更改列表本身。如果您只想还原,请复制相关行)。此外,请确保 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 & merging 和一切)......你只需提交。