是否有 git 最大标签名称长度?

Is there a git max tag name length?

我很好奇 git 标签名称的长度是否有任何限制。如果不在官方 git 文档中,那么 github、bitbucket、gitlab 等一些更流行的平台呢?

我看过的文档没有列出标签名称的长度限制。但是必须有某种限制,因为没有什么是无限的,当你达到“限制”时,最终某些东西会失败。这里有两个与标记相关的主要文档,特别是标记名称。

https://git-scm.com/docs/git-tag https://git-scm.com/docs/git-check-ref-format

我问这个问题的主要原因是我在过去 8 年多的时间里一直在使用的 SVN 存储库正试图转移到 git(一个 bitbucket 存储库),并且我得到的反馈是,“长”标签名称会造成一团糟的麻烦,并且会阻止迁移。我在 repo 中找到的最长标签名称长度小于 60 个字符,标签少于 100 个。

标签名称长度有限制吗?

有几个,但它们各不相同:

  • 因为个别名称组件有时存储在文件系统名称中,所以 comp/on/ent 形式的标签名称对每个部分都有限制:compon,和 ent。 Linux 系统的实际限制取决于底层文件系统,通常为 255 个字符。其他文件系统可能有更短的限制(有些可能允许更长的名称,但 255 通常足够了)。

  • 因为整个名称有时存储为文件系统名称,所以全名 refs/tags/comp/on/ent 可能有系统强加的限制。这可能是 1024 个字符(旧的 Unix 系统)、4096 个字符(一些当前的 Unix/Linux 系统)或其他一些值——在 Windows 系统上通常要小得多。另见 Where is PATH_MAX defined in Linux?

  • PATH_MAX 限制可能是相对的(.git/refs/tags/...,其中 .git/ 比最大值多五个字节)或绝对的(/path/to/repo/.git/refs/tags/...,其中 /path/to/repo/.git/ 比限制多了五个字节)。

在Git内部,曾经有各种大小为1024或PATH_MAX的缓冲区,但这些都应该在现代Git中清理干净,所以你通常应该仅 运行 进入系统范围限制,例如 Windows 260 字节 PATH_MAX.

但是请注意,标签是呈现给人类的。人类在这里往往受到更多限制。我建议您将自己的字符数控制在 20 到 100 个左右,具体取决于您的标签的系统性。