Git已将TFS服务器上的单个目录拆分为两个。

4
我有一些Git存储库托管在TFS上。我已经开发了一段时间,在配置CD时,我们的团队注意到该项目的一部分被拆分成两个目录。一个是大写字母,另一个是驼峰式大小写。我以为这只是一些合并问题。但是......只有在浏览代码时,这两个目录才在TFS Web门户网站上可见。在Windows机器上克隆它只会产生单个(大写)目录。而且在TFS上,目录内容部分在第一个目录中,部分在第二个目录中。
什么可能是原因?如果它是Linux Git服务器,我猜它可能是一些文件系统差异。但它是Windows TFS服务器。
更新
看起来在开发过程中,该目录已从UPPERCASE重命名为CamelCase。有趣的是,TFS不仅提供克隆,还提供zip文件下载。在zip文件中有单个目录。但在目录内部有两个文件(也已重命名)。在解压缩zip期间,它要求替换一个文件。看起来是git区分大小写与Windows不区分大小写之间的问题。
1个回答

2
如您所知,git内部的文件名(包括目录名)只是TREE对象中的文本,TREE对象更或多或少地是表示目录列表的压缩文本文件。因此,它是区分大小写的。
正如您所知道的(并指出的),Windows文件系统不区分大小写。
有一系列的解决方法内置于git中,由core.ignoreCase配置选项控制,这些方法有助于减轻不匹配的情况。虽然它们并不完美,但大多数情况下,如果每个人都正确使用此设置,并且没有人刻意阻挠它,通常足以避免发生糟糕的事情。
有可能某个人没有正确设置这个选项,或者在区分大小写的系统上做了一些工作,他们已经关闭了core.ignoreCase,或者在添加命令中输入了与数据库中不同的大小写。很难详细列出确切的情况,但重点是,解决方法并不完美。所以这种情况可能会发生。
从那里开始,糟糕的事情可能会发生,因为代表不同大小写名称的两个树可以在一个版本中具有冲突的内容。因此,虽然可能值得进行历史重写,但在分支末端修复它可能是值得的。
顺便说一下,您在UI中看到这个问题,但在下载的ZIP中没有看到是因为TFS几乎可以肯定地将提交检出(到不区分大小写的文件系统)作为生成ZIP以供下载的第一步;而UI可能直接从存储库数据库中提取对象。
除非您有后续问题,否则可能没有更多可说的了。

很好的解释。谢谢Mark。我们会记住git的大小写敏感性,并查看提到的ignoreCase选项。 - Arkadiusz Kałkus

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