首页 > 解决方案 > Mac中的Git碰撞路径

问题描述

在我的 Mac 中克隆项目时收到以下消息:

Cloning into 'cinetogoproject'...
remote: Counting objects: 3863, done.
remote: Compressing objects: 100% (2777/2777), done.
remote: Total 3863 (delta 1203), reused 2940 (delta 762)
Receiving objects: 100% (3863/3863), 152.22 MiB | 3.12 MiB/s, done.
Resolving deltas: 100% (1203/1203), done.
Updating files: 100% (3109/3109), done.
warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:

  'frontend/cinetogo/source/src/attractora/Functions/index.js'
  'frontend/cinetogo/source/src/attractora/functions/index.js'

听起来可能与这个问题相似,但我的情况不同,因为其中一个冲突目录不存在!

出现问题是因为我将目录重命名functionsFunctions期望 git 正常管理更改,但是在拉取时更改与其他程序员的提交发生冲突。

现在,报告了合并冲突,我能够解决它们......但是 git 解决了它们functions,那不存在,并且仍然无法解决Functions,那确实存在,即使文件已经不包含合并冲突。

有什么方法可以解决这个问题吗?

标签: git

解决方案


这确实是同一个问题。您有两个目录,只是大小写不同,您不能将两者都写入系统,因为您的 Mac 以不区分大小写的方式格式化。它们都存在于 Git 中并且是独立且独立的,但是您的系统无法同时处理两者。

合并冲突可能被写入一个文件的树中,然后被另一个文件覆盖,这就是您无法解决它们的原因。

你有一些选择:

  • 重新安装操作系统(或格式化新的 APFS 分区),使其区分大小写,然后检查存储库。
  • 使用 Linux VM 或 Linux Docker 容器并挂载 repo 以使用它。
  • 删除其中一个目录,如Git FAQ 中所述

如果您和您的合作者计划在不区分大小写的系统上开展此项目,我强烈建议您采用强制名称大小写的策略。有时这在您的语言或框架中很常见,例如 Java 如何命名其文件的大小写与类的拼写完全一致,但如果您的框架缺少这一点,我建议始终使用小写。您可能希望在 CI 系统中强制执行此操作(例如,通过检查 的输出git ls-files)以获得良好的衡量标准。


推荐阅读