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不熟悉,所以办法还是笨了些,大家一看了之吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值