0

我们在 mercurial 中有一个使用 hg convert 创建的子存储库。大约三周以来,我们已经让人们修改和签入更改(在 Windows 下使用 Tortoise),然后我们才注意到我们有两个版本的原始转换文件:

例如

Dir\Project/FileName.ext
Dir/Project/FileName.ext

我已经尝试过hg rename, hg forget, hg remove,但是当我们似乎总是以两个文件都消失或两个文件都存在时结束。我还查看了案例折叠建议,但它们似乎并不适用。

任何有关修复的建议将不胜感激。如果我们丢失了 \ 版本上的历史,那将不会是世界末日。

谢谢

4

1 回答 1

0

我已经看到转换后的 SVN 存储库会发生这种情况(使用hgsubversion,但我敢打赌hg convert有同样的问题)。在我看到的情况下,路径的 svn 属性发生了变化,这显然导致“包含反斜杠的文件名”(不是路径)存储在 svn 中。

在第一种情况下,我看到它是一个目录路径,导致我立即遇到问题 - 在 Windows 上使用该目录路径创建了一个零长度文件,然后在更新 Mercurial 中止,因为它无法创建目录同名。

我希望创建双重条目的序列类似于:

  1. 更新到包含带反斜杠的文件路径的修订版

  2. 新文件显示为未跟踪,因为 Mercurial 清单当前包含带有反斜杠的路径,但在查看工作目录时,它会将所有文件路径规范化为正斜杠 - 因此它不会出现在清单中。

  3. 用户添加“新”文件。

  4. 在随后的更新中,两个路径都会更新,但其中一个会覆盖工作目录中的另一个。如果你幸运的话,新版本就是最终在工作目录中的版本。

您可能无法在 Windows 上解决此问题,但您应该能够通过单引号文件名(例如hg rm 'Dir\Project\FileName.ext'. 如果您在 Linux 上更新到有问题的修订版,您应该会看到文件实际上命名'Dir\Project\FileName.ext'在工作目录的根目录中。

只需确保反斜杠版本是应该删除的版本 - 如果不是,您可能需要手动将它们合并在一起以获得您想要的结果。

于 2013-03-26T20:23:22.937 回答