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

时间:2011-02-10 12:02:14

标签: mercurial history

我们刚才有一个从Subversion转换过的Mercurial存储库,今天已经注意到存储库中有 no 历史记录的文件。

此行为的一个症状是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]

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

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

2 个答案:

答案 0 :(得分:2)

听起来很奇怪,实际上是不可能的。我试图调试此问题的方法是更新到不同的版本,并检查文件第一次出现在工作副本中的哪个版本。如果您以二进制搜索方式执行此操作(类似于bisect extension的工作方式),您应该找到一个修订版,在几次更新后引入该文件。

这并不能解决问题,但它可能有助于追踪其来源。

答案 1 :(得分:1)

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