Git 在 TFS 服务器上将单个目录拆分为两个目录



我在TFS上托管了一些Git存储库。我已经开发了一段时间,在配置CD的过程中,我们的团队注意到项目的一部分被分成了两个目录。一个用大写写,第二个用驼峰写。我以为这只是一些合并问题。但。。。浏览代码时,两个目录仅在 TFS Web 门户上可见。克隆它(在Windows机器上(只产生一个(大写(目录。此外,在 TFS 上,目录内容部分位于第一个目录中,部分位于第二个目录中。

可能是什么原因?如果是 Linux Git 服务器,我猜可能是一些文件系统差异。但它是Windows TFS服务器。

更新

似乎在开发过程中,目录已从大写重命名为 CamelCase。有趣的是,TFS不仅提供zip文件下载,还提供克隆。在 zip 文件中有一个目录。但是目录中有两个文件(也重命名(。在解压缩过程中,zip要求替换一个文件。它看起来像 git 区分大小写与 Windows 不区分大小写的问题。

您可能知道,内部 git 文件名(包括目录名称(只是TREE对象中的文本,它或多或少是表示目录列表的压缩文本文件。 所以这是区分大小写的。

如您所知(并指出(,Windows文件系统不区分大小写。

git中内置了一系列解决方法,由core.ignoreCase配置选项控制,这有助于缓解不匹配。 它们并不完美,但在大多数情况下,如果每个人都正确使用此设置并且没有人特意阻止它,那么通常足以防止坏事发生。

可能是有人没有正确设置此设置,或者在他们关闭core.ignoreCase的区分大小写的系统上做了一些工作,或者使用与当时数据库中的矛盾大小写显式键入git add命令。 很难详细列出确切的场景,但关键是,解决方法并不完美。 所以它可能会发生。

从那里开始,可能会发生不好的事情,因为表示不同大小写名称的两棵树在一个版本中可能会有冲突的内容。 因此,虽然它可能值得也可能不值得重写历史,但它可能值得在分支尖端修复。

顺便说一下,您在 UI 中看到这一点而不是在下载的 ZIP 中看到它的原因是,TFS 几乎可以肯定地将提交签出(到不区分大小写的文件系统(作为生成 ZIP 以供下载的第一步;而 UI 可能直接从存储库数据库中的对象中提取。

不确定还有更多要说的,除非您有后续问题。

最新更新