需求提出
公司采用 perforce 进行 code 版本管理,同一团队在同一 branch 下工作。多人把 code check out 到本地,edit 后再 submit 上传库中。若 A 和 B 对同一文件 F 进行了 edit,A 先于 B 将 文件 F 上传,待 B 上传时,就会出现本地修改与库文件版本冲突的问题。
常用的方法是 p4 resolve 把个人改动与他人改动 merge 到一起。p4 resolve 的 merge 参数如表 1 所示。
▼ 表 1:p4 resolve 的 megre 相关参数
大部分情况下,两人的改动是会冲突的,需要手动把我方改动与库里的他人改动 merge 到一起。此时需要一系列操作来完成手动 merge。考虑到每次手动 merge 都是那么几个命令,干脆封装下得了。
脚本特性
- 生成原文件的本地备份,原文件名添加时间戳作为备份文件名。
- 原文件 revert 并 sync 到最新版本,与库版本对齐。
- resolve 完毕后,CL 仍与 resolve 前的 CL 相同。
- 需要 p4 diff 手动 merge。
脚本
脚本名为 m_resolve.sh
,为方便使用请在 ~/.bashrc
里 alias m_resolve 'sh ~/script/m_resolve.sh'
。
#! /usr/bin/sh # File Name: m_resolve.sh # Usage : sh m_resolve.sh conflicted_file timestamp=$(data +%Y%m%d%H%M%S) ori_file=$1 bak_file=.$ori_file.$timestamp # get CL CL=`p4 opened $ori_file` CL=`echo ${CL#*\edit change}` # keep right CL=`echo ${CL%% *}` # keep left # cp $ori_file $bak_file p4 revert $ori_file p4 sync $ori_file p4 edit $ori_file cp $bak_file $ori_file p4 reopen -c $CL $ori_file p4 diff $ori_file