p4批量revert
问题提出:同事误操作直接把几个分支全部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相关推荐
- 如何批量回退提交(批量revert commit)
如果是用idea,则按照如下操作即可 1.打开git 2.选中多个commit 3.revert commits 如果用git命令 则参考:https://blog.csdn.net/hongchan ...
- perforce(P4)常用命令(命令行)
序号 命令 说明 1 p4 -c <clientName> sync <filename> 全部同步, 注意需要指定客户端名称 如 -c test, 后面可以 具体文件名称 2 ...
- perforce(p4) 使用
P4递交建议流程: 1. p4 sync 2. 覆盖或者改动local文件 3. p4 delete or 直接delete 废弃的文件 4. p4 add: 增加新文件到depot 5. p4 di ...
- Perforce使用中文教程
P4递交建议流程: 1. p4 sync 2. 覆盖或者改动local文件 3. p4 delete or 直接delete 废弃的文件 4. p4 add: 增加新文件到depot 5. p4 di ...
- svn revert批量撤回本地修改操作
revert的作用是撤回SVN本地文件的修改,有时候我们修改的文件过多,又想给恢复到之前,就需要批量操作了.使用如下: svn revert --depth=infinity file 可以对file ...
- svn revert 批量文件夹
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity') --深度ARG:根据 ...
- bat+sqlcmd 批量执行脚本
Hello,此BAT脚本能够帮助开发者将某目录下全部SQL脚本按文件名称依次在指定数据库中批量执行. 不用忍受powershell invoke-sqlcmd 的笨重.在指执行时多一种选择. bat文 ...
- Git版本回退之 reset 和 revert
在开发过程中,可能会遇到过错误提交的情况.这种情况下,先不要着急,可以通过以下两个命令来帮助你优雅的实现版本回退. git reset 假如现在有如下几个提交: 其中:A 和 B 是正常提交,而 C ...
- linux中登录p4后,linux下perforce(p4)的使用方法和命令
环境变量: export P4PASSWD=abcdefg export P4CLIENT=dyoldfish.com export P4USER=dyoldfish export P4PORT=19 ...
最新文章
- Ubuntu 14.04安装搜狗拼音linux版应该注意的问题
- xshell如何登陆堡垒机_Xshell连接有跳板机(堡垒机)的服务器
- BeautfuiSoup4解析器
- DB2的日志理解难点
- C语言 | 编程实现4
- MongoDB数据库(5.mongodb的聚合操作以及mongodb的高级查询2)
- Wintellect Collection Classes for .NET now on CodePlex
- git中如何合并某个指定文件?
- 如何用ant给Java项目生成文档
- MFC BCGControlBar 库 使用方法
- C++_012C++11的语法新特性
- txt文本换行(txt文本设置、wps替换换行)
- 请教点击按钮时获得文本框中的字符进行操作问题
- bittorrent协议
- LSV又新增13个地质图!量测对比分析全都能搞定
- 如何用adobe audition剪切音频单独导出保存
- 用这个方法解决Mac OS安装软件“软件已损坏”的提示,百试不爽
- 车托帮APP的顽固残留清除
- 2019年燕山大学大学生程序设计大赛(一)
- PHP书籍推荐TOP10排行榜