我正在开发一个使用 git 作为版本控制的共享项目。
我想避免其他开发人员在项目中创建包含换行符等特殊字符的标签,因为在添加标签时它会破坏复杂命令语法。
事实上,我想强制标签名称格式仅包含字母数字字符和字符“_”。我如何强制此存储库不接受任何不符合此标准的标签。
Gitlab 中有这样的选项吗?
关于禁止使用换行符的标签问题的第一部分,Git 不允许名称中包含换行符或其他空白字符的标签。
你可以自己测试一下:
$ git tag $'foo\nbar'
fatal: 'foo
bar' is not a valid tag name.
$ git tag 'foo bar'
fatal: 'foo bar' is not a valid tag name.
这实际上是由 plumbing 命令
git-check-ref-format
处理的。文档指出:
Git 对引用的命名方式施加了以下规则:
它们可以包含用于分层(目录)分组的斜杠
,但斜杠分隔的组件不能以点/
开头或以序列.
结束。.lock
它们必须至少包含一个
。这强制存在诸如/
、heads/
等类别,但实际名称不受限制。如果使用tags/
选项,则放弃此规则。--allow-onelevel
它们在任何地方都不能有两个连续的点
。..
它们在任何地方都不能有 ASCII 控制字符(即值小于 、 或
的字节)、空格、波形符DEL
、脱字号~
或冒号^
。:
他们不能在任何地方有问号
、星号?
或开括号*
。请参阅下面的[
选项了解此规则的例外情况。--refspec-pattern
它们不能以斜杠
开头或结尾,也不能包含多个连续的斜杠(有关此规则的例外情况,请参阅下面的/
选项)。--normalize
它们不能以点结尾
。.
它们不能包含序列
。@{
它们不能是单个字符
。@
它们不能包含
。\
对于第二部分,Gitlab 似乎不支持。
一个可能的解决方法是使用您想要的模式创建受保护的标签规则,然后定期删除除受保护的标签之外的所有标签。