我有这个文件,似乎已进入一个奇怪的状态。 Perforce声称它已经过修改和未开放:
> p4 diff -se
data.xml
通常,当文件被修改并且未打开时,我可以使用sync -f
来修复它。但是,出于某种原因,这个特定的文件真的很顽固:
> p4 sync -f data.xml
//Depot/Stream/data.xml#19 - refreshing data.xml
> p4 diff -se
data.xml
与sync -f
一样,clean
似乎有效,但它仍声称已经修改过:
> p4 clean data.xml
//Depot/Stream/data.xml#19 - refreshing data.xml
> p4 diff -se
data.xml
不出所料,当我尝试reconcile -w
时会发生同样的事情:
> p4 reconcile -w data.xml
//Depot/Stream/data.xml#19 - refreshing data.xml
> p4 diff -se
data.xml
如果我使用reconcile
(没有-w
),则会打开文件,但P4Merge会将文件显示为相同,即使不忽略空格或行结尾:
> p4 reconcile data.xml
//Depot/Stream/data.xml#19 - opened for edit
> p4 diff -se
> p4 diff -sa
data.xml
使用revert
只需将其恢复到之前的状态:
> p4 revert data.xml
//Depot/Stream/data.xml#19 - was edit, reverted
> p4 diff -sa
> p4 diff -se
data.xml
是什么给出的?我以前复制过这个文件而没有打开它进行编辑,这是偶然的。是否将其置于不可逆转的状态,可能与Windows权限有关?
我尝试删除文件(del data.xml
)并再次获取,但Perforce创建的新副本也遇到了同样的问题。
答案 0 :(得分:3)
有两种可能性浮现在脑海中:
share
命令进行检查。dos2unix
LineEnd选项,无论何时从中读取,都会对每个文件进行隐式dos2unix
行结束转换本地磁盘。如果\r
是无操作,则文件将显示为相同;如果文件中有p4 verify
个,那么它们的删除将显示为差异。 在任何一种情况下,提交都可能通过创建校验和来修复文件,该校验和与工作区中的任何内容相匹配 - 但是我建议进行管理员检查x
,因为如果文件有变坏了它可能是一个更大问题的症状(磁盘故障等)。
答案 1 :(得分:0)
只需详细说明@Samwise的答案:
如果您的工作空间配置了行尾配置“ Shared”,但是某个时候某个文件被检入到带有Windows(CrLf)行尾的存储库中,那么将发生这种情况:
这种情况大概是出现在另一个用户,其工作空间配置为“ Unix”行结束模式时,实际上提交了Windows样式的文件。由于配置“ unix”根本不规定任何转换,因此“ Cr”字符已保存在服务器上。这可能是偶然的,也可能是故意的。
在这种情况下正确的行动方针似乎还不清楚:
就个人而言,我将临时将工作空间设置从“共享”更改为“ unix”(仅用于协调操作),然后再切换回“共享”以进行日常强制使用。