解决Windows中的Mercurial Case-Folding Collision

rea*_*ers 30 mercurial

我已经在StackOverflow上看到了其他Mercurial案例折叠答案 - 他们说如果您可以访问像unix这样的区分大小写的文件系统,那么请在那里查看它应该修复它.问题是,我无法访问unix框,我是开发Windows应用程序的Windows开发人员.

如何在没有Unix机箱的情况下解决这个问题?

Lau*_*lst 28

正在处理的filesystem帮助主题将包含在下一版Mercurial中:

https://www.mercurial-scm.org/pipermail/mercurial-devel/2012-April/039522.html

重命名碰撞文件

在不区分大小写的文件系统上,更新到包含大小写冲突的文件的修订将中止,即使使用 --check--clean.

要修复此类修订,您应该为区分大小写的文件系统上的一个或两个冲突文件指定新名称,并提交它们以创建新的冲突安全修订.

.. note ::如果您想(或需要)浏览或修复不区分大小写的文件系统上的此类修订,请参阅"手动更新"部分.

如果:hg:merge被中止,但是:hg:update --check对每个修订成功,在要合并的修订之间发生冲突.

在这种情况下,应重命名其中一个或两个中的文件以避免在合并之前发生冲突.

使用最近的Mercurial,您可以在下面的步骤中安全地更改文件名的大小写,即使在不区分大小写的文件系统上::

$ hg rename a.txt tmp
$ hg rename tmp A.TXT
Run Code Online (Sandbox Code Playgroud)

手动更新

如果您希望(或需要)更新工作目录,导致在不区分大小写的文件系统上导致大小写折叠冲突,例如重命名碰撞文件或浏览此类修订内容,请参阅下面的Wiki页面::

https://www.mercurial-scm.org/wiki/ManualCheckout

不建议非专业的Mercurial用户使用此功能.

这里描述了另一种类似的手动方法:

https://www.mercurial-scm.org/wiki/FixingCaseCollisions

这也深入到Mercurial内部,所以你应该避免它,除非作为最后的手段.


小智 13

我们通过发出HG重命名命令而不依赖于区分大小写的文件系统来解决这个问题.假设你遇到麻烦,因为"Foo.txt"需要被称为"foo.txt":

hg rename Foo.txt Foo.txt.renamed
hg rename Foo.txt.renamed foo.txt
Run Code Online (Sandbox Code Playgroud)

我们在删除文件时遇到此问题,然后在主存储库中重新创建具有相同名称但不同大小写的文件.尽管已经从主存储库中删除了更改集,但是在这些更改之前创建的分支存储库无法合并.