git p4 submit提交时出现目录重复、路径翻倍异常问题求助
问题根因
1. 路径映射逻辑冲突
你执行git p4 clone时直接拉取了整个taskstream流根,而你的stream配置仅将dira/dirb/...设为共享路径,拉取到的Git仓库根目录下直接包含dira/dirb/层级。同时你的Perforce工作区映射规则是将流内的dira/dirb/...映射到本地工作区的dira/dirb/...路径,提交时Git侧的dira/dirb/xxx会被拼接在工作区映射的dira/dirb/前缀后,最终生成dira/dirb/dira/dirb/xxx的重复路径。
2. Git p4参数配置缺失
你没有给git p4指定--use-client-spec参数,git p4不会主动复用你本地Perforce工作区的路径映射规则,会默认按照depot的全路径层级处理提交路径。
3. 配置拼写错误
你执行clone时填写的depot路径//substream/taskstream和实际的stream路径//streambase/taskstream不一致,同时工作区映射规则里的buildbode为拼写错误(应为buildcode),也会引发路径解析异常。
排查步骤
- 执行
ls查看当前Git仓库的根目录结构,确认根目录下是否直接存在dira目录,而非Git根目录就是dira/dirb下的业务文件 - 执行
git config -l | grep git-p4查看git p4的相关配置,确认是否开启了客户端规则适配 - 执行
p4 where //substream_workspace/dira/dirb/test.txt测试路径映射,看输出的depot路径是否为//streambase/taskstream/dira/dirb/test.txt,验证工作区映射是否正常 - 检查工作区映射规则的拼写,修正
buildbode为buildcode
修复方案
临时修复当前异常提交
- 执行
p4 revert //substream_workspace/...撤销当前异常的变更列表 - 手动将Git侧
dira/dirb下的所有文件移动到Git仓库根目录,删除空的dira目录后再执行git p4 submit
永久修复同步配置
- 重新初始化git p4同步仓库,拉取时指定精确路径并开启客户端规则:
# 清空原有Git目录,重新执行clone git p4 clone --use-client-spec //streambase/taskstream/dira/dirb/... ./
拉取完成后Git根目录直接是dira/dirb下的所有文件,不会多一层dira/dirb前缀。
2. 给当前Git仓库配置永久复用客户端规则,避免后续提交路径异常:
git config git-p4.useClientSpec true
- 验证提交:新增一个测试文件到Git根目录,执行
git p4 submit --prepare-p4-only查看变更列表的路径是否符合预期,确认没有重复层级后再正式提交。
内容的提问来源于stack exchange,提问作者MikeS
相关产品推荐
相关产品推荐

