SuperAPI AI 工具集

tools-p4-shelving

编程与开发

查看项目

更新于 10-16 04:24

技能介绍

用途

Perforce Shelving 用于将待提交的变更(pending changes)暂存到 Perforce 服务器上,而不实际提交。它适用于以下场景:备份进行中的工作、共享变更以供代码审查、在任务之间切换、在工作区之间转移工作、临时搁置变更,以及提交前审查(Swarm)。

主要能力

  • 搁置变更:使用 p4 shelve -c 12345 搁置变更列表中的所有文件,或指定文件。支持强制替换已有搁置(-f)。
  • 查看搁置变更:使用 p4 changes -s shelved 列出搁置的变更列表,p4 describe -S 12345 查看详情,p4 diff2 对比搁置文件与仓库版本。
  • 恢复搁置变更:使用 p4 unshelve -s 12345 恢复到同一变更列表,或指定不同变更列表(-c),支持强制覆盖(-f)。
  • 删除搁置:使用 p4 shelve -d -c 12345 删除搁置文件或整个搁置。
  • 直接提交搁置:使用 p4 submit -e 12345 提交搁置文件并自动清理搁置。
  • 搁置与提交对比:搁置存储在服务器上但不创建修订版本,不影响仓库,通常不触发构建;提交则创建修订版本并影响仓库。

使用方式

基本搁置

# 搁置变更列表中的所有文件
p4 shelve -c 12345

# 搁置特定文件
p4 shelve -c 12345 file1.txt file2.txt

# 替换已有搁置
p4 shelve -f -c 12345

查看搁置

# 列出搁置的变更列表
p4 changes -s shelved

# 列出当前用户的搁置
p4 changes -s shelved -u $P4USER

# 查看搁置变更列表详情
p4 describe -S 12345

恢复搁置

# 恢复到同一变更列表
p4 unshelve -s 12345

# 恢复到不同变更列表
p4 unshelve -s 12345 -c 12346

# 强制恢复(覆盖本地变更)
p4 unshelve -s 12345 -f

删除搁置

# 删除搁置文件
p4 shelve -d -c 12345

# 删除整个搁置
p4 shelve -d -c 12345 //...

提交搁置

# 直接提交搁置文件
p4 submit -e 12345

工作流程

  • 工作进度备份:下班前搁置工作,第二天继续;若工作区丢失,可通过恢复搁置找回。
  • 任务切换:搁置当前功能的工作,还原本地变更,处理紧急修复后再恢复搁置。
  • 代码审查:开发者搁置变更供审查,审查者恢复搁置到工作区进行审查,批准后开发者提交并清理搁置。
  • 跨工作区共享:在一个工作区搁置变更,在另一个工作区恢复搁置。
  • 集成前测试:搁置功能分支变更,在集成工作区同步主线后恢复搁置进行测试。

高级用法

  • 带解决冲突的恢复:使用 p4 unshelve -n -s 12345 预览冲突,然后 p4 resolve -am 自动合并,或 -f 强制覆盖。
  • 更新已有搁置:编辑文件后使用 p4 shelve -f -c 12345 更新搁置。
  • 部分搁置:仅搁置变更列表中的部分文件。
  • 跨流搁置:在不同流之间搁置和恢复,可能需要分支映射。

搁置管理

  • 查找旧搁置:p4 changes -s shelved -u $P4USER
  • 清理旧搁置:可编写脚本删除超过一定天数的搁置。
  • 搁置统计:统计搁置中的文件数量和大小。

Swarm 集成

  • 搁置变更后,Swarm 可自动检测并创建审查。
  • 根据反馈修改后,使用 p4 shelve -f -c 12345 更新搁置,触发审查更新。
  • 审查批准后,使用 p4 submit -e 12345 提交搁置文件并自动清理。

最佳实践

  • 频繁搁置以备份进行中的工作。
  • 使用描述性的变更列表名称以便识别。
  • 清理旧搁置,避免遗留孤立搁置。
  • 重新搁置时使用 -f 强制更新。
  • 恢复搁置后验证文件是否正确。
  • 提交后删除搁置,保持服务器整洁。
  • 用于代码审查,提交前进行。
  • 不要仅依赖搁置作为永久备份。
  • 沟通搁置编号以便协作。
  • 提交前测试恢复的代码。

限制与注意事项

  • 搁置不创建修订版本,不影响仓库,通常不触发构建。
  • 搁置不是永久备份,不应作为唯一备份手段。
  • 恢复搁置时可能遇到冲突,需要解决或强制覆盖。
  • 删除搁置前需先删除所有文件。
  • 权限可能限制恢复搁置操作。
  • 跨流搁置可能需要分支映射。

常见问题

  • 文件未搁置:检查文件是否在变更列表中打开。
  • 无法恢复搁置(冲突):使用 -f 强制或解决冲突。
  • 搁置未找到:检查变更列表编号,可能已被删除。
  • 无权限恢复搁置:检查保护设置,可能需要所有者权限。
  • 文件不同:使用 -f 替换或解决。
  • 无法删除搁置:必须先删除所有文件。