Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
默认情况下,Windows 和 macOS 文件系统不区分大小写(但保留大小写)。 大多数 Linux 文件系统区分大小写。 Git 最初构建为 Linux 内核的版本控制系统,因此毫不奇怪,它区分大小写。
虽然在 Git for Windows 中解决了不区分大小写的 OS 的许多问题,但仍存在一些怪癖。
文件和文件夹名称
在 Linux 上,签出包含“File.txt”和“file.txt”的 Git 存储库是没有问题的。 这些是不同的文件名。 在 Windows 和 macOS 上,签出这两个文件将导致第二个文件覆盖第一个文件。 如果两个文件夹仅因大小写而异,则它们的内容最终会在不区分大小写的文件系统上混合在一起。
修复事例冲突
修复存在此问题的存储库的一种方法是在区分大小写的环境中签出它。
重命名文件和文件夹,使其不再冲突,然后将这些更改推送到存储库。
适用于 Linux 的 Windows 子系统 是这样的环境之一。
另一种方法是对每个冲突使用命令 git mv -f <conflicting name> <non-conflicting name> ,谨慎使用两个文件名的确切大写。
避免事例冲突
最好避免首先创建这种情况。 Azure Repos 提供了一个 案例强制设置 ,以防止导致这种情况的推送。 对于开发人员来说,采用使用选项卡完成提交文件的习惯也会有所帮助。 由于 Windows 和 macOS 都是大小写保留的,因此这将确保 Git 的内部版本看到文件系统使用的完全相同的大小写。
分支和标记名称
可以创建两个分支或标记(称为“refs”),这些分支或标记仅在大小写上有所不同。
Git 的内部以及 Azure DevOps Services/TFS 将将它们视为两个单独的 refs。
在用户的计算机上,Git 使用文件系统来存储 refs。
由于歧义,提取和其他作开始失败。
每个 ref 都由一个小文件表示,如果 ref 名称包含 / 字符,则最终 / 部分前的部分由文件夹表示。
避免问题的一种简单方法是始终使用全小写分支和标记名称。 如果已创建两个分支或标记并出现此问题,可以在 Azure Repos Web UI 中修复它。
修复分支名称
在分支页中,导航到相关提交。 在上下文菜单中,选择“新建分支”。 为分支提供不发生大小写冲突的新名称。 返回到分支页并删除冲突的分支。
修复标记名称
修复标记名称的步骤类似于分支。 在标记页中,导航到标记的提交。 在上下文菜单中,选择“创建标记”。 为标记提供没有大小写冲突的新名称。 返回到标记页并删除冲突标记。