如何检查有效的Git分支名称?

如何检查有效的Git分支名称?,第1张

如何检查有效的Git分支名称?

让我们剖析各种规则并从中构建正则表达式部分:

  1. 它们可以包括

    /
    用于层次结构(目录)分组的斜杠,但斜杠分隔的组件不能以点开头
    .
    或以序列结尾
    .lock

     # must not contain /.

    (?!.*/.)
    # must not end with .lock
    (?<!.lock)$

  2. 它们必须至少包含一个

    /
    。这会强制出现诸如heads /,tags /等类别,但是实际名称不受限制。如果使用该
    --allow-onelevel
    选项,则该规则将被放弃。

     .+/.+  # may get more precise later
  3. 它们

    ..
    在任何地方都不能有两个连续的点。

     (?!.*..)
  4. 它们不能在任何地方具有ASCII控制字符(即值小于

    40
    或的字节
    177 DEL
    ),空格,代字号
    ~
    ,插入符
    ^
    或冒号
    :

     [^00-37177 ~^:]+   # pattern for allowed characters
  5. 他们在任何地方都不能有问号

    ?
    ,星号
    *
    或方括号
    [
    。请参阅以下
    --refspec-pattern
    选项,了解此规则的例外情况。

     [^00-37177 ~^:?*[]+   # new pattern for allowed characters
  6. 它们不能以斜杠开头或结尾,也不能

    /
    包含多个连续的斜杠(有关
    --normalize
    此规则的例外,请参阅下面的选项)

     ^(?!/)

    (?<!/)$
    (?!.*//)

  7. 它们不能以点结尾

    .

     (?<!.)$
  8. 它们不能包含序列

    @{

     (?!.*@{)
  9. 它们不能包含

     (?!.*\)

将所有这些拼凑在一起,我们得出以下怪异现象:

^(?!.*/.)(?!.*..)(?!/)(?!.*//)(?!.*@{)(?!.*\)[^00-37177 ~^:?*[]+/[^00-37177 ~^:?*[]+(?<!.lock)(?<!/)(?<!.)$

而且,如果您要排除以这些开头的内容,

build-
则只需添加另一个前行即可:

^(?!build-)(?!.*/.)(?!.*..)(?!/)(?!.*//)(?!.*@{)(?!.*\)[^00-37177 ~^:?*[]+/[^00-37177 ~^:?*[]+(?<!.lock)(?<!/)(?<!.)$

可以通过合并一些寻找通用模式的东西来对此进行优化:

^(?!@$|build-|/|.*([/.].|//|@{|\))[^00-37177 ~^:?*[]+/[^00-37177 ~^:?*[]+(?<!.lock|[/.])$


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存