问题提出:同事误操作直接把几个分支全部checkout了,在windows客户端没法批量操作,因为数量太多导致卡死

解决思路:在p4服务器上用脚本执行revert操作

代码如下

#!/bin/bash
# $1是user,$2是workspace
p4 opened -u $1 | grep $2 | awk '{pos=index($0, "#"); print substr($0,0,pos-1)}' >revert_list_new.txt
awk -v work_space=$2 '{if(length($0) > 5){str = str" \""$0"\""}; if(length(str) > 850){ print "p4 revert -C "work_space""str >> "out_file_new.sh"; str=""}}' revert_list_new.txt

第一行是通过p4 opened命令查找出所有打开的文件,同时提取文件名,这里是以第一个#为截止符,比如“//depot/impforest_upgrate/client/cocos2d-x-3.7/build/cocos2d_js_tests.xcodeproj/xcshareddata/xcschemes/js-tests Mac.xcscheme#1 - edit default change (text) by designer@designer_6193”,这里注意文件名中可能有空格,提取的时候一定要准确,还可以这样,用awk的贪婪匹配

p4 opened -u $1 | grep $2 | awk '{if(match($0, "//depot.*?#")>0){print substr($0, RSTART, RLENGTH - 1)}}'  >revert_list_new.txt

第二行是将找出的所有文件名,批量的放到revert命令中,注意,因为文件名可能有空格,所有要加上引号。同时revert命令的参数有1024个utf8字符限制,所以我这里初略得设置为大于850字符的话就切换另一个revert命令,或者是直接向p4 revert传递10个参数:

cat revert_list.txt | xargs -n10 p4 revert -C workspace

补充:

经过评论区blakeyi的启发,我今天尝试了下按目录来提交revert,效率更高,

p4 revert -C workspace //depot/target_dir/...

大家以后要是有类似需求,直接给最上层目录就可以,效率大大提升,可以省去大量的请求次数,这里感谢blakeyi给出的建议,正是从他的建议中得到的启发,刚开始的时候对p4不熟悉,所以办法还是笨了些,大家一看了之吧。

p4批量revert相关推荐

  1. 如何批量回退提交(批量revert commit)

    如果是用idea,则按照如下操作即可 1.打开git 2.选中多个commit 3.revert commits 如果用git命令 则参考:https://blog.csdn.net/hongchan ...

  2. perforce(P4)常用命令(命令行)

    序号 命令 说明 1 p4 -c <clientName> sync <filename> 全部同步, 注意需要指定客户端名称 如 -c test, 后面可以 具体文件名称 2 ...

  3. perforce(p4) 使用

    P4递交建议流程: 1. p4 sync 2. 覆盖或者改动local文件 3. p4 delete or 直接delete 废弃的文件 4. p4 add: 增加新文件到depot 5. p4 di ...

  4. Perforce使用中文教程

    P4递交建议流程: 1. p4 sync 2. 覆盖或者改动local文件 3. p4 delete or 直接delete 废弃的文件 4. p4 add: 增加新文件到depot 5. p4 di ...

  5. svn revert批量撤回本地修改操作

    revert的作用是撤回SVN本地文件的修改,有时候我们修改的文件过多,又想给恢复到之前,就需要批量操作了.使用如下: svn revert --depth=infinity file 可以对file ...

  6. svn revert 批量文件夹

    --depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity') --深度ARG:根据 ...

  7. bat+sqlcmd 批量执行脚本

    Hello,此BAT脚本能够帮助开发者将某目录下全部SQL脚本按文件名称依次在指定数据库中批量执行. 不用忍受powershell invoke-sqlcmd 的笨重.在指执行时多一种选择. bat文 ...

  8. Git版本回退之 reset 和 revert

    在开发过程中,可能会遇到过错误提交的情况.这种情况下,先不要着急,可以通过以下两个命令来帮助你优雅的实现版本回退. git reset 假如现在有如下几个提交: 其中:A 和 B 是正常提交,而 C ...

  9. linux中登录p4后,linux下perforce(p4)的使用方法和命令

    环境变量: export P4PASSWD=abcdefg export P4CLIENT=dyoldfish.com export P4USER=dyoldfish export P4PORT=19 ...

最新文章

  1. Ubuntu 14.04安装搜狗拼音linux版应该注意的问题
  2. xshell如何登陆堡垒机_Xshell连接有跳板机(堡垒机)的服务器
  3. BeautfuiSoup4解析器
  4. DB2的日志理解难点
  5. C语言 | 编程实现4
  6. MongoDB数据库(5.mongodb的聚合操作以及mongodb的高级查询2)
  7. Wintellect Collection Classes for .NET now on CodePlex
  8. git中如何合并某个指定文件?
  9. 如何用ant给Java项目生成文档
  10. MFC BCGControlBar 库 使用方法
  11. C++_012C++11的语法新特性
  12. txt文本换行(txt文本设置、wps替换换行)
  13. 请教点击按钮时获得文本框中的字符进行操作问题
  14. bittorrent协议
  15. LSV又新增13个地质图!量测对比分析全都能搞定
  16. 如何用adobe audition剪切音频单独导出保存
  17. 用这个方法解决Mac OS安装软件“软件已损坏”的提示,百试不爽
  18. 车托帮APP的顽固残留清除
  19. 2019年燕山大学大学生程序设计大赛(一)
  20. PHP书籍推荐TOP10排行榜

热门文章

  1. 数仓模型之维度表技术
  2. 01 leading
  3. MyBatis批量保存数据
  4. screen安装与命令详解
  5. 关于计算机的英语作文带翻译100字,英语作文带翻译100字
  6. 移动端及APP测试概述
  7. TCP、HTTP详解
  8. physx中判断actor是否会发生碰撞
  9. IT各大公司名字由来
  10. Qt6 官网QtCreator 下载与安装方法win10