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表示什么是
在模式中的组(…)内。在这里,你可以写
暂停:再次在更换零件中;此功能非常有用
当你要寻找的模式比简单的 绳子
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"