Git - 文件夹大小写敏感问题

32

我试图将一个已经存在的代码库放入像Git这样的版本控制系统中。

我面临着一个特殊的问题,其中代码库包含两个同名但大小写不同的文件夹,如“Form”和“form”。

以下是情景: 假设我们有三个系统Linux(区分大小写的文件系统)、MAC(不区分大小写)和WINDOWS(不区分大小写)

现在,如果有人在LINUX上创建了一个名为FORM的文件夹,其中包含文件a.phpb.phpc.php,另一个名为form的文件夹,其中包含文件a.phpb.phpd.php,并将其推送到远程repo。

现在,当MAC或WINDOWS上的用户克隆repo时,Git在处理来自远程的FORMform时会如何行事,因为MAC和WINDOWS不区分大小写。

4个回答

42

5

您应该重命名文件夹,以便任何两个同级文件夹都不相同(不区分大小写)。这将使您的代码更易于移植,减少错误发生的可能性,因为开发人员不会混淆一个文件夹与另一个文件夹。


2
Git在处理来自远程的FORM和form时会如何表现,因为MAC和WINDOWS不区分大小写?更好的是,从Git 2.17(2018年第二季度)开始,因为Git将在所有实例中跟踪这些具有不同大小写的文件夹。在此之前,在大小写不敏感的文件系统上,使用不同大小写拼写目录路径的"git add"文件会破坏名称哈希数据结构并导致意外结果。
查看提交 c95525e(2018年2月8日)由Ben Peart (benpeart)提交。
(由Junio C Hamano -- gitster --提交 2ac76d8中合并,2018年2月27日) "name-hash": 在"adjust_dirname_case()"中正确折叠目录名称。修正"adjust_dirname_case()"中的指针算术,以便使用正确的字符串长度调用"find_dir_entry()"。以前传入"dir1/foo"将传递长度为6而不是正确的4。这导致"find_dir_entry()"永远找不到该条目,因此随后折叠名称到具有正确大小写的版本的"memcpy"从未执行。

0
我遇到了一个问题,代码库中包含两个名称相同但大小写不同的文件夹,如“Form”和“form”。
Git 是基于Unix的代码。它是区分大小写的,因此允许您在不同情况下使用相同的名称,但Windows不会容忍此类情况。
除了重命名文件夹之外,您无法做任何事情。

这个问题甚至引发了 Git 中的一个安全漏洞,使你能够存储如下文件夹::

.GIT
.GIt

http://git-blame.blogspot.com.es/2014/12/git-1856-195-205-214-and-221-and.html

你可以提交和检出到 .Git/<anything>(或任何大小写排列的 .[gG][iI][tT],除了全部小写的 .git)。 但这将覆盖不区分大小写的文件系统(例如 Windows 和 Mac OS X)上相应的 .git/。 目前你无法解决这个问题,你需要有不同的文件夹。

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