代码之家  ›  专栏  ›  技术社区  ›  Arkadiusz Kałkus

git在tfs服务器上将单个目录拆分为两个目录

  •  3
  • Arkadiusz Kałkus  · 技术社区  · 6 年前

    我在tfs上托管了一些git存储库。我已经开发了一段时间,在cd的配置过程中,我们的团队注意到项目的一部分被分成了两个目录。一个是大写的,第二个是驼色的。我以为这只是一个合并的问题。但是…浏览代码时,只有在tfs web门户上才能看到两个目录。克隆它(在windows机器上)只产生一个(大写)目录。此外,在tfs上,目录内容部分在第一个目录中,部分在第二个目录中。

    原因可能是什么?如果是linux git服务器,我想可能是文件系统的不同。但它是Windows TFS服务器。

    更新

    在开发过程中,目录似乎已从大写重命名为camecase。有趣的是,tfs提供了zip文件下载,而不仅仅是克隆。在zip文件中只有一个目录。但在目录中有两个文件(也被重命名)。在解压缩期间,zip请求替换一个文件。它看起来像是Git区分大小写与Windows区分大小写的问题。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark Adelsberger    6 年前

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

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

    这里有一个内置的工作集合 git ,由 core.ignoreCase 配置选项,有助于减少不匹配。它们并不完美,但在很大程度上,如果每个人都正确地使用这个设置,并且没有人特意阻止它,那么通常就足以防止坏事发生。

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

    从那里开始,坏事 可以 发生,因为表示不同大小写名称的两棵树在一个版本中可能有冲突的内容。因此,尽管它可能值得或不值得重写历史,但它可能值得在分支提示处修复。

    顺便说一下,您在ui中而不是下载的zip中看到这一点的原因是,tfs几乎可以肯定地将提交(到不区分大小写的文件系统)作为生成下载zip的第一步检查出来;而ui可能直接从repo数据库中的对象绘制。

    不知道还有什么要说,除非你有后续问题。