我们在mercurial中有一个使用hg convert创建的子存储库。在我们注意到我们有两个版本的原始转换文件之前,大约三个星期我们让人们修改并检查更改(在Windows下使用Tortoise):
e.g。
Dir\Project/FileName.ext
Dir/Project/FileName.ext
我已经尝试了hg rename
,hg forget
,hg remove
,但是当我们似乎总是两个文件都消失了,或者两个文件都存在时。我也看过案例折叠建议,但它们似乎并不适用。
任何有关修复的建议都将受到赞赏。如果我们丢失了不会成为世界末日的\版本的历史。
由于
答案 0 :(得分:0)
我已经看到这种情况发生在已转换的SVN存储库中(使用hgsubversion,但我敢打赌hg convert
有同样的问题)。在我看到它的情况下,路径有一个svn属性更改,显然导致存储在svn中的“包含反斜杠的文件名”(不路径)。
在第一种情况下,我看到它是一个目录路径,导致我立即遇到问题 - 在Windows上使用目录路径创建了一个零长度文件,然后在更新Mercurial中止,因为它无法创建同名目录。
我希望创建双重条目的序列类似于:
更新包含带有反斜杠的文件路径的修订
新文件显示为未跟踪,因为Mercurial清单当前包含带反斜杠的路径,但在查看工作目录时,它会将所有文件路径规范化为正斜杠 - 因此它不会出现在清单中。 / p>
用户添加“新”文件。
在后续更新中,两个路径都会更新,但会在工作目录中覆盖另一个路径。如果你很幸运,那么新版本就是最终出现在工作目录中的版本。
您可能无法在Windows上解决此问题,但您应该能够通过单引用文件名来删除Linux(或其他类似UNIX的操作系统,具有区分大小写的文件系统)上的反斜杠版本,例如: hg rm 'Dir\Project\FileName.ext'
。如果您更新到Linux上存在问题的修订版,您应该会在工作目录的根目录中看到实际命名为'Dir\Project\FileName.ext'
的文件。
只需确保反斜杠版本是应该删除的版本 - 如果不是,您可能需要手动将它们合并在一起以获得所需的结果。