我已检出多个文件,并准备好提交更改。
我意识到我的客户端规范是硬编码我的备用root,因此我从客户端规范中的所有行中删除了备用根,并在备用根框中指定它。
我还有一些未检出的文件,我还没准备好添加到更改列表,所以我重命名了下面的目录结构,然后同步了我需要的所有分支,然后将目录重命名为AltBranch并重命名旧目录。 / p>
现在,所有签出的文件都列为“未映射到工作区视图” - 但它们仍在那里。
我想强制perforce同意我的版本,所以我尝试了p4 sync -k
,但是我收到了错误
//.../X.cpp#10 - is opened for edit and can't be deleted
然后我尝试p4 sync -k -f
,但我收到了错误
//.../X.cpp#10 - refreshing C:\Work\...\X.cpp
//.../X.cpp#10 - is opened for edit and can't be deleted
总的来说,我真的很喜欢Perforce,但是坚持总是知道最好的是令人沮丧的
答案 0 :(得分:1)
当您没有签出文件时,重新安排客户端映射要容易得多。你有规格仓库吗?如果是这样,您可以通过从规范库中恢复来轻松返回到先前版本的客户端定义。然后,提交或搁置您的文件,以便您可以到达工作区中没有打开文件的位置。然后,您可以重新安排客户端映射并尝试使用不同的布局,Perforce将很乐意重新排序磁盘上的文件,而不会遇到打开文件的问题。
答案 1 :(得分:1)
我设法生成一个包含一系列Perforce命令的批处理文件,以实现我想要的目标。
此解决方案是Windows / DOS特定的 - 虽然我可以想象其他命令shell可以执行此修复所需的解析:
@ echo off
echo Please Exit Perforce
pause
setlocal
rem Retrieve depot spec format of file
for /f "delims=# " %%d in ('p4 files %1') do set p4name=%%d
rem Retrieve current pending changelist
for /f "tokens=5 delims= " %%d in ('p4 opened %p4name%') do set change=%%d
p4 revert -k %p4name%
p4 sync -k %p4name%
p4 edit -c %change% %1
此版本特定于文件,但可以使用files
替换dirs
如果滴答中的命令失败,命令提示符也不会设置ERRORLEVEL。
答案 2 :(得分:0)
我认为你可以做p4 reopen <changelist>
,它应该恢复正常。
答案 3 :(得分:0)
我有“未映射到工作区视图”,结果发现我的客户端规范/工作区中有两个必须重新排序的映射。
坏:
//B/foo/... //mySpec/foo/...
//A/... //mySpec/...
好:
//A/... //mySpec/...
//B/foo/... //mySpec/foo/...