无法更改标记“文件夹”名称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/x
与 release/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/tags
的Release/
文件夹中,尽管它是作为小写标签创建的。
由于这些是轻量级标签,因此操作 .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 中使用 Windows 中具有相同名称但大小写不同的目录