Perforce技术问询:如何基于特殊状态工作区创建分支?
搞定Perforce混合状态工作区的分支快照方案
嘿,我来帮你解决这个Perforce分支创建的问题!你的工作区混合了旧变更列表版本、HEAD版本和已提交的新增文件,要完整创建快照到//depot/DEV/1.0/...,可以按下面的步骤来,保证不会遗漏任何内容:
第一步:确认工作区状态(关键!)
首先要确保你的工作区没有未提交的变更——你提到新增内容已经提交,那再检查一下:
- 运行
p4 status,确保输出显示no file(s) to submit, no file(s) to reconcile - 运行
p4 opened,确认没有任何被打开的文件(如果有,要么提交要么 revert)
第二步:直接基于工作区快照创建分支
Perforce支持直接引用工作区的当前状态作为版本源,这样不用分别处理不同目录的版本,一步搞定:
- 首先创建目标分支的根目录(如果还不存在):
p4 mkdir //depot/DEV/1.0 - 执行复制命令,把工作区的所有当前版本文件同步到目标分支:
这里的p4 copy //depot/MAIN/...@your_workspace_name //depot/DEV/1.0/...your_workspace_name是你的Perforce工作区名称,这个命令会自动匹配工作区中每个文件的当前版本(不管是旧变更列表xxx、HEAD还是新增的已提交文件),并复制到目标分支对应的路径下。
第三步:提交分支快照
- 运行
p4 opened确认所有需要复制的文件都已被打开到一个新的变更列表 - 提交这个变更列表,附上清晰的描述:
p4 submit -d "Full snapshot of workspace: mixed old CL xxx, HEAD versions, and new added files/folders"
备选方案:分目录单独处理(如果工作区有特殊情况)
如果上面的方法因为某些原因不生效(比如工作区有映射异常),可以手动分目录处理:
- 处理旧变更列表的目录:
p4 copy //depot/MAIN/some_are_old_changelist_xxx/...@xxx //depot/DEV/1.0/some_are_old_changelist_xxx/... - 处理HEAD版本的目录:
p4 copy //depot/MAIN/some_are_head/...@HEAD //depot/DEV/1.0/some_are_head/... - 处理新增的文件/文件夹:
p4 copy //depot/MAIN/some_are_new_added_files_folders/... //depot/DEV/1.0/some_are_new_added_files_folders/...
之后同样运行p4 submit提交所有变更。
这样操作后,//depot/DEV/1.0/...就会完全和你当前的工作区状态一致,所有特殊变更都被完整保留下来啦!
内容的提问来源于stack exchange,提问作者Fisher
相关产品推荐
相关产品推荐

