克隆后存储库中的文件,但没有历史记录

lar*_*moa 5 mercurial history

我们之前有一个从Subversion转换过的Mercurial存储库,今天已经注意到存储库中的文件没有任何历史记录.

此行为的一个症状是hg status报告文件是干净的,而hg log报告没有相同文件的更改集:

> hg clone [repo]
> hg st -c FileWithMissingHistory.cs

C  FileWithMissingHistory.cs

> hg blame FileWithMissingHistory.cs
FileWithMissingHistory.cs: no such file in rev [...]
> hg log FileWithMissingHistory.cs
> hg log FileWithMissingHistory.cs -f
abort: cannot follow nonexistent file: "FileWithMissingHistory.cs"

> hg log -v | grep FileWithMissingHistory.cs

[gives output, there arechangesets mentioning the file]
Run Code Online (Sandbox Code Playgroud)

显然,示例中的文件名已更改.我尝试过使用hg验证,但是这个命令报告说repo没问题.有没有人经历过这一点,有什么我们可以做的让历史"恢复生机"?在所讨论的文件上放置虚拟历史记录是可以接受的,但不是最理想的.

编辑: 我已经做了一些调查,并注意到"FileWithMissingHistory.cs"在修订版238中从另一个文件名(hg copy + delete)重命名.如果我执行hg update -r238并且hg登录此版本的文件我做没有任何历史.在原始文件上执行hg登录会按预期报告历史记录,因此在复制过程中似乎会以某种方式丢失历史记录(同样,使用hg副本重命名文件,并且变更集清楚地表明文件已被复制).

lar*_*moa 1

我终于找到了上述影响的原因,看来这是由混合大小写问题引起的。一些文件位于名称小写的目录中,而其他文件位于名称相同的目录中,只是大小写混合(例如“directory/FileWithHistory.cs”和“DiReCtOrY/FileWithMissingHistory.cs”)。在 Windows 上,这两个文件将位于同一目录中,从而导致问题。