Mercurial忽略文件重命名(更改大小写)

22

我正在处理一个继承自Windows人员的项目,它使用Hg版本控制。它存在一些不一致的文件名约定,我尝试修复它们,因此将文件jquery.fullpage.js重命名为jquery.fullPage.js(只是将"P"大写),以遵循jQuery库的原始作者。

然而,Hg未检测到大写和小写字母之间的更改,也没有将其视为重命名或删除/创建的文件。因此,我无法提交该更改并推送到线上。这在本地可以工作,但在我推送到远程暂存服务器后,在远程服务器上会出现404错误。显然,远程服务器上的文件没有被重命名为大写字母P。

我知道我可以通过删除文件、提交、恢复文件并重命名、再次提交来解决这个问题,但这似乎是一种粗糙的解决方法。

我该如何解决这个问题?

4个回答

29

这是一个大小写折叠的问题。尝试通过Mercurial重命名文件:hg rename jquery.fullpage.js jquery.fullPage.js


2
这个有效。对于这个解决方案我并不是很满意。尽管我已经阅读了更多关于大小写折叠问题的内容,看起来它似乎是与不区分大小写的文件系统有关的问题。 - Noel Llevares
我使用了 mv 命令,但它仍然没有导致我在运行 pull -uv 命令的系统中重命名。哦,我正在尝试重命名一个文件夹/目录,该目录是由另一个答案提到的。 - binki
正则表达式解决方案怎么样?假设我从不同的文件夹中更改了许多扩展名文件(所有图像)。 - Toni Michel Caubet

17
如果你想重命名一个文件,可以直接使用hg rename命令,如前所述。
然而(至少在Windows系统中),如果你想重命名一个文件夹,那么你不能直接重命名它。常见的解决方法是使用一个中间步骤:
hg rename Foo tmp
hg rename tmp foo

另一种解决方法是使用中间删除。但是这样做不被鼓励,因为您将失去文件历史记录。


1
在这两个重命名之间,我需要提交吗? - binki

0

如果你使用的是在OS X上的HFS,它是区分大小写但不敏感的话,那么Hg(或Git,我发现)将无法检测到更改。我使用Linux,我的同事使用OS X,我们在Git上遇到了类似的问题。通过中间重命名是一种解决方法,或者像你建议的那样使用中间删除。

我相信Jakub建议使用hg本身来实现重命名将起作用,但我没有尝试过,因为我没有安装hg。


确实,我在OSX上。它没有检测到更改。远程暂存服务器在Linux上,因此暂存服务器运行良好。 - Noel Llevares

-1

如果更改已经生效,也可以使用以下命令:hg rename --after oldFile newFile


1
这对我来说没有起作用。Mercurial抱怨newFile不存在(尽管它显然存在)。 - srs
请确保您写的是完整路径,并且大小写敏感。 - scar80

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接