我正在git
post- receive
用Python开发一个钩子。数据stdin
通过类似于以下内容的行提供
ef4d4037f8568e386629457d4d960915a85da2ae 61a4033ccf9159ae69f951f709d9c987d3c9f580 refs/heads/master
第一个哈希值是旧引用,第二个哈希值是新引用,第三列是要更新的引用。
我想将其分为3个变量,同时还要验证输入。 如何验证分支名称?
我目前正在使用以下正则表达式
^([0-9a-f]{40}) ([0-9a-f]{40}) refs/heads/([0-9a-zA-Z]+)$
如man git-check-ref-
format所示
,它不接受所有可能的分支名称。例如,它排除build-master
有效的名称为的分支。
我实际上想排除以“ build-”开头的任何分支。可以在同一个正则表达式中完成吗?
给定以下出色的答案,我编写了一些测试,可以在https://github.com/alexchamberlain/githooks/blob/master/miscellaneous/git-
branch-re-
test.py
找到 。
状态:以下所有正则表达式均无法编译。 这可能表明我的脚本有问题或语法不兼容。
让我们剖析各种规则并从中构建正则表达式部分:
它们可以包括/
用于层次结构(目录)分组的斜杠,但斜杠分隔的组件不能以点开头.
或以序列结尾.lock
。
# must not contain /.
(?!.*/.)
# must not end with .lock
(?<!.lock)$
它们必须至少包含一个/
。这会强制出现诸如heads /,tags /等类别,但是实际名称不受限制。如果使用该--allow-onelevel
选项,则该规则将被放弃。
.+/.+ # may get more precise later
它们..
在任何地方都不能有两个连续的点。
(?!.*\.\.)
它们不能在任何地方具有ASCII控制字符(即值小于\040
或的字节\177 DEL
),空格,代字号~
,插入符^
或冒号:
。
[^\000-\037\177 ~^:]+ # pattern for allowed characters
他们在任何地方都不能有问号?
,星号*
或方括号[
。请参阅以下--refspec-pattern
选项,了解此规则的例外情况。
[^\000-\037\177 ~^:?*[]+ # new pattern for allowed characters
它们不能以斜杠开头或结尾,也不能/
包含多个连续的斜杠(有关--normalize
此规则的例外,请参阅下面的选项)
^(?!/)
(?<!/)$
(?!.*//)
它们不能以点结尾.
。
(?<!\.)$
它们不能包含序列@{
。
(?!.*@\{)
它们不能包含\
。
(?!.*\\)
将所有这些拼凑在一起,我们得出以下怪异现象:
^(?!.*/\.)(?!.*\.\.)(?!/)(?!.*//)(?!.*@\{)(?!.*\\)[^\000-\037\177 ~^:?*[]+/[^\000-\037\177 ~^:?*[]+(?<!\.lock)(?<!/)(?<!\.)$
而且,如果您要排除以这些开头的内容,build-
则只需添加另一个前行即可:
^(?!build-)(?!.*/\.)(?!.*\.\.)(?!/)(?!.*//)(?!.*@\{)(?!.*\\)[^\000-\037\177 ~^:?*[]+/[^\000-\037\177 ~^:?*[]+(?<!\.lock)(?<!/)(?<!\.)$
可以通过合并一些寻找通用模式的东西来对此进行优化:
^(?!@$|build-|/|.*([/.]\.|//|@\{|\\))[^\000-\037\177 ~^:?*[]+/[^\000-\037\177 ~^:?*[]+(?<!\.lock|[/.])$
我在进行git克隆时遇到此错误 错误:- 尝试重新安装git(最新) 还是相同的错误 操作系统:-Windows
这里是错误: 为什么字母*不匹配任何东西??
我有四个分支,如master->origin/regacy,FeatureA->origin/FeatureA。如你所见,我打错了名字。 因此我想重命名一个远程分支名称(origin/regacy origin/legacy或origin/master) 但Git console向我返回了一条错误消息。 我该如何解决这个问题呢?
我不想重命名远程分支,如重命名本地和远程Git存储库的主分支中所述。 如何重命名尚未推送到远程分支的本地分支? 如果您还需要重命名远程分支:如何重命名Git本地和远程分支名称
所以问题是:git分支名称中的最大字符数是多少?它取决于系统吗?是否可以在远程存储库(即Github)上拒绝的存储库中创建长分支名?
问题内容: 检查URL在Java中是否有效的最佳方法是什么? 如果试着拨打和赶上,但它似乎很乐意与任何开头。 我不关心建立连接,只是有效性。有办法吗?Hibernate Validator中的注释?我应该使用正则表达式吗? 编辑:和 URL的一些示例。 问题答案: 考虑使用Apache Commons UrlValidator类 有几个属性,您可以设置来控制如何类的行为,在默认情况下,和被接受。
问题内容: 我需要一个正则表达式或PHP中的函数来验证字符串是否是一个很好的XML元素名称。 表格w3schools: XML元素必须遵循以下命名规则: 名称可以包含字母,数字和其他字符 名称不能以数字或标点符号开头 名称不能以字母xml(或XML或Xml等)开头 名称不能包含空格 我可以编写一个基本的正则表达式来检查规则1,2和4,但是它不能解决所有允许的标点符号,也不能解决第三条规则 友善更新
我有一个Jenkins管道工作,它被配置为检查一个git回购和一个特定的本地分支。 两个值都为“null”