代码之家  ›  专栏  ›  技术社区  ›  Marc Novakowski

有没有一种简单的方法可以还原整个P4变更列表?

  •  13
  • Marc Novakowski  · 技术社区  · 17 年前

    比如说,我签入了一个包含大量文件的变更列表(在Perforce中),我想还原整个变更列表。有没有一种简单的方法可以一次性“恢复”整个变更列表?

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

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

    正如您可以想象的,对于大型变更列表来说,这是相当麻烦的。

    6 回复  |  直到 17 年前
        1
  •  8
  •   Greg Whitfield    17 年前

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

    link 提供详细信息。

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

    现在已经完全发布了。看见 Perforce downloads .

        2
  •  3
  •   ya23 devoured elysium    17 年前
        3
  •  1
  •   Douglas Leeder    17 年前

    http://kb.perforce.com/UserTasks/ManagingFile..Changelists/RevertingSub..Changelists 但是这个过程并没有你建议的那么简单。@ya23建议的脚本看起来更好。

        4
  •  1
  •   Anny G Aaron Smith    10 年前

    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/

        5
  •  0
  •   Zilicon    12 年前

    当我想删除整个变更列表时,我也会遇到同样的问题。因此,我使用以下脚本(注意,它还删除变更列表的搁置和变更列表本身。如果您只想恢复,请复制相关行)。 此外,确保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
    
        6
  •  0
  •   Ricky Levi    12 年前

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

    您为它提供了要回滚的修订,它会自动准备所有内容(每个文件的#n-1&合并和所有内容)。。。你只要服从。