无法更改标记“文件夹”名称git的大小写

Posted

技术标签:

【中文标题】无法更改标记“文件夹”名称git的大小写【英文标题】:Can't change case of tag "folder" name git 【发布时间】:2022-01-11 21:25:17 【问题描述】:

我有以下标签:

release/1.0
release/2.0
release/2.2.5
Release/2.5.0
Release/3.0.0

我想让外壳在发布时匹配。例如,release/2.5.0 而不是 Release/2.5.0

所以我运行以下命令序列:

git tag release/2.5.0 Release/2.5.0
git -d Release/2.5.0

但是,我最终(在上述情况下)release/2.5.0 被完全删除。 我认为它可能有大小写问题(这是名称之间的唯一区别),所以从我的遥控器获取标签后,我尝试了以下操作:

git tag r/2.5.0 Release/2.5.0
git tag -d Release/2.5.0
git tag release/2.5.0 r/2.5.0

在这之后,我有以下标签:

r/2.5.0
release/1.0
release/2.0
release/2.2.5
Release/2.5.0
Release/3.0.0

所以它强制 Release 的大小写回到原来的大写。我假设引用存储在某处,但我不知道处理这个问题的最佳方法。

FWIW:我最初是从 Windows 上的 cmder 控制台模拟器和 WSL 中的 ubuntu 上尝试的。我在我的 git GUI 客户端(fork)中尝试了它。结果到处都是一样的。

这并不是什么大不了的事,但它不太干净,特别是在 git gui 中,当我有两个文件夹将我的标签分开时。

【问题讨论】:

Git 在内部使用一个非常糟糕的“数据库”来存储分支和标签名称:有一个平面文件,其中大写和小写都很重要。然后在文件系统中有单独的文件,其中大写和小写在 Linux 上很重要。但在你的系统上没有那么多。所以 Git “认为”Release/xrelease/x 不同,有时是,有时不是。然后,Git 会在更新这些“不同”名称的同时部分破坏自己的数据库。 目前最简单的解决方案是在完全区分大小写的系统上进行重命名:启动 Linux(必要时在 VM 中)并在那里修复它。否则,好吧,看看你接受的答案。 :-) @torek 你是说 WSL 的工作方式与 VM 不同吗? 如果 WSL 提供区分大小写的文件系统,它应该可以在那里工作。我不使用 Windows,因此也不使用 WSL,所以我从未尝试过。 @torek - 我很确定 WSL 是一个 Linux 操作系统。所以这让我怀疑改变大小写是否会在完整的 Linux 发行版上以任何不同的方式正常工作。我想我会测试。 【参考方案1】:

(在这台机器上我使用 git for windows 2.24.1)

由于轻量级标签是.git/refs/tags 中的文件/文件夹,我不能有混合小写/大写的标签。示例:

zrrbite@ZRRBITE MINGW64 /d/dev/git/test
$ git tag Release/1.0.0

zrrbite@ZRRBITE MINGW64 /d/dev/git/test
$ git tag
Release/1.0.0

zrrbite@ZRRBITE MINGW64 /d/dev/git/test
$ git tag release/2.0

zrrbite@ZRRBITE MINGW64 /d/dev/git/test
$ git tag
Release/1.0.0
Release/2.0

我从创建Release/1.0.0 开始。随后,如果我创建release/2.0(小写'r'),它会被放入refs/tagsRelease/ 文件夹中,尽管它是作为小写标签创建的。

由于这些是轻量级标签,因此操作 .git 文件夹应该是安全的。只需根据自己的喜好修改文件和文件夹的名称。例如,在将 refs/tags/Release 重命名为 refs/tags/release 后,我现在得到小写标签:

zrrbite@ZRRBITE MINGW64 /d/dev/git/test (old)
$ git tag
release/1.0.0
release/2.0

【讨论】:

这很有意义。谢谢!

以上是关于无法更改标记“文件夹”名称git的大小写的主要内容,如果未能解决你的问题,请参考以下文章

Git 区分大小写

无法使用 git add 添加文件

在 git 中使用 Windows 中具有相同名称但大小写不同的目录

Windows上的Git:重命名文件后无法切换分支(仅更改大小写)

git无法识别新增的文件

Git-大小写敏感问题