Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 提取Git中准备提交消息的分支名称部分_Regex_Git_Sed_Hook - Fatal编程技术网

Regex 提取Git中准备提交消息的分支名称部分

Regex 提取Git中准备提交消息的分支名称部分,regex,git,sed,hook,Regex,Git,Sed,Hook,我想在每个提交消息前加上分支名称的一部分。例如,假设我的分支命名约定如下: issueType/repoName issueNumber-->bug/myRepo-123 我希望我的提交消息来自 added missing semicolon 到 到目前为止,在我的prepare-commit-msg文件中,我有以下内容,但它正在打印出整个分支名称 #!/bin/sh NAME=$(git branch | grep '*' | sed 's/* //') STORY_NUMBER=$(ech

我想在每个提交消息前加上分支名称的一部分。例如,假设我的分支命名约定如下:

issueType/repoName issueNumber-->bug/myRepo-123

我希望我的提交消息来自

added missing semicolon

到目前为止,在我的prepare-commit-msg文件中,我有以下内容,但它正在打印出整个分支名称

#!/bin/sh
NAME=$(git branch | grep '*' | sed 's/* //')
STORY_NUMBER=$(echo $NAME | sed 's/.*\(myRepo-[0-9]\+\.log\).*/\1/')
echo "$STORY_NUMBER" : $(cat "$1") > "$1"
。。。呈现

bug/myRepo-123 : added missing semicolon
我需要对正则表达式进行哪些编辑才能提取
/
之后的所有内容


谢谢

我终于找到了一个非常好的问题和答案,帮助我解决了问题。可以在这里找到

最后,这是我的脚本,它打印出了
myRepo-123:commit message

#!/bin/sh
BRANCH_NAME=$(git symbolic-ref --short HEAD)
STORY_NUMBER=$(echo $BRANCH_NAME | sed -n -e 's/^.*\(myRepo-\)/\1/p')
echo "$STORY_NUMBER": $(cat "$1") > "$1"
在解释如何修改正则表达式之前,值得注意的是,我找到了一种更简单的方法,可以使用symbolic ref命令上的
--short
标志来获取当前分支名称

下面是从regex的另一个堆栈交换应答中获取的

详细说明:

  • -n表示默认情况下不打印任何内容
  • -e后面跟着一个sed命令。s是模式替换命令
  • 正则表达式^.stalled:与模式匹配 您要查找的,加上前面的任何文本(.i)表示任何文本, 首字母为“^”,表示比赛从 电话线)。注意,如果失速:在线路上发生多次, 这将与上一次出现的匹配
  • 这场比赛,也就是说,到stalled:,线上的所有东西都被替换为 空字符串(即已删除)
  • 最后一个p表示打印转换后的行
  • 如果要保留匹配部分,请使用 替换零件中的反向参考:\1表示什么是
    在模式中的组(…)内。在这里,你可以写
    暂停:再次在更换零件中;此功能非常有用
    当你要寻找的模式比简单的 绳子

git分支的输出是什么?需要知道它来构造消息你只是在寻找分支的名称吗?它是
bug/myRepo-123
所以,
git分支
输出
bug/myRepo-123
?很公平!你需要脚本吗?(或)您是否计划运行一组命令我上面有一个脚本,它位于我的/git文件夹中的prepare commit msg中。我的问题是我的正则表达式不正确
's/*\(myRepo-[0-9]\+\.log\)./\1/'
。它呈现整个分支名称,而我只希望它呈现
myRepo-123
。要调试正则表达式,我们需要知道应用它的输出是什么?我需要git branch的完整输出
#!/bin/sh
BRANCH_NAME=$(git symbolic-ref --short HEAD)
STORY_NUMBER=$(echo $BRANCH_NAME | sed -n -e 's/^.*\(myRepo-\)/\1/p')
echo "$STORY_NUMBER": $(cat "$1") > "$1"