3

我有许多文件已签出,并准备提交更改。

我意识到我的客户端规范对我的备用根进行了硬编码,因此我从客户端规范的所有行中删除了备用根,并在备用根框中指定了它。

我也有一些文件没有签出,我还没有准备好添加到更改列表中,所以我重命名了下面的目录结构,然后同步了我需要的所有分支,然后将目录重命名为 AltBranch 并将旧的重命名回来。

然而,现在所有签出的文件都被列为“未映射到工作区视图” - 但是它们仍然存在。

我想强制 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

4 回答 4

1

当您没有签出文件时,重新安排您的客户端映射要容易得多。你有规格仓库吗?如果是这样,您可以通过从规范库中恢复它来轻松地恢复到以前版本的客户端定义。然后,提交或搁置您的文件,这样您就可以在工作区中没有打开的文件。然后,您可以重新安排您的客户端映射并尝试不同的布局,Perforce 将愉快地重新排序您磁盘上的文件,而不会遇到打开文件的问题。

于 2011-04-06T13:41:06.627 回答
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。

于 2011-04-12T14:32:18.243 回答
0

我认为你可以做一个p4 reopen <changelist>,它应该恢复正常。

于 2011-04-06T19:24:28.460 回答
0

我有“未映射到工作区视图”,结果我的客户规范/工作区中有两个必须重新排序的映射。

坏的:

//B/foo/... //mySpec/foo/...
//A/... //mySpec/...

好的:

//A/... //mySpec/...
//B/foo/... //mySpec/foo/...
于 2011-04-07T12:37:24.380 回答