强制Perforce接受工作空间视图为有效

时间:2011-04-06 10:58:19

标签: perforce sync perforce-client-spec

我已检出多个文件,并准备好提交更改。

我意识到我的客户端规范是硬编码我的备用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,但是坚持总是知道最好的是令人沮丧的

4 个答案:

答案 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/...