执行p4 duplicate失败致Perforce出现幽灵文件,无法提交该文件
Perforce提交.p4ignore时文件冲突问题解决方法
问题背景
将仓库复制到新位置时,执行以下操作后出现提交冲突:
- 成功执行仓库复制命令:
p4 duplicate //OldDepot/OldStream/Folder/Folder/... //NewDepot/ProjectStream/... - 尝试复制原文件夹外的.p4ignore到新流,执行命令后提示成功但在P4V/P4Admin中看不到文件:
p4 duplicate //OldDepot/OldStream/Folder/.p4ignore //NewDepot/ProjectStream - 手动添加文件到变更列表50:
p4 add //NewDepot/ProjectStream/.p4ignore -c 50 -d "Adding P4Ignore" - 提交时出现错误:
p4 submit -c 50 Cannot add file '//NewDepot/ProjectStream/.p4ignore', filename collides with an existing file //NewDepot/ProjectStream
已尝试的操作无效:
- 通过P4V和命令行提交
- 删除本地.p4ignore文件后重试
- 销毁(Obliterate)流
- 删除并重新创建流(选择删除流历史选项)
问题根源
执行p4 duplicate复制.p4ignore时,目标路径//NewDepot/ProjectStream未指定文件名,导致系统将.p4ignore文件直接重命名为//NewDepot/ProjectStream(即创建了一个与流同名的文件)。后续尝试在该流目录下添加.p4ignore文件时,就与已存在的同名文件(流路径本身被当作文件)产生冲突。由于该文件无扩展名且与流目录同名,P4V/P4Admin默认视图中不会显示,导致误以为操作失败。
解决步骤
1. 确认冲突文件的存在
通过命令行查看该文件的状态:
p4 fstat //NewDepot/ProjectStream
输出中若Type字段为file,则确认该路径是一个文件而非目录。
2. 删除错误创建的文件
方法一:常规删除提交(推荐)
- 同步该文件到本地工作区:
p4 sync //NewDepot/ProjectStream - 删除仓库中的该文件:
p4 delete //NewDepot/ProjectStream - 提交删除操作:
p4 submit -d "Remove incorrectly duplicated file"
方法二:彻底销毁文件(需管理员权限)
若无需保留该文件的历史记录,可使用obliterate命令彻底删除:
p4 obliterate //NewDepot/ProjectStream
3. 重新提交.p4ignore文件
完成上述操作后,重新提交原变更列表:
p4 submit -c 50
4. 正确复制.p4ignore的方法(后续参考)
若需再次复制该文件,需指定目标文件名,确保文件被复制到流目录下:
p4 duplicate //OldDepot/OldStream/Folder/.p4ignore //NewDepot/ProjectStream/.p4ignore
内容的提问来源于stack exchange,提问作者Clampy
相关产品推荐
相关产品推荐

