我目前的分支命名约定是这样的:
ticket-45-my-new-feature-branch-description
Run Code Online (Sandbox Code Playgroud)
我目前在我的.git/hooks/prepare-commit-msg文件中使用此代码,以使用分支名称预先添加每个提交消息:
BRANCH_NAME=$(git branch 2>/dev/null | grep -e ^* | tr -d ' *')
if [ -n "$BRANCH_NAME" ] && [ "$BRANCH_NAME" != "master" ]; then
echo "[$BRANCH_NAME] $(cat $1)" > $1
fi
Run Code Online (Sandbox Code Playgroud)
最终结果:
[ticket-45-my-new-feature-branch-description] test commit
Run Code Online (Sandbox Code Playgroud)
我想要完成的是这样输出:
[ticket-45] test commit
Run Code Online (Sandbox Code Playgroud)
布朗尼指出,如果我们可以把它资本化:
[TICKET-45] test commit
Run Code Online (Sandbox Code Playgroud)
我希望保留我的描述性分支名称,但在提交消息中截断前置文本.我确定我必须使用一些正则表达式,但我真的不知道如何实现这一点.我应该提一下,我们有几个项目同时进行,因此分支名称不同,如下所示:
ticket-123-branch-name
abc-22-my-branch
ua-11-my-feature
Run Code Online (Sandbox Code Playgroud)
唯一的共同点是我需要在第二个' - '之前的所有内容.
任何帮助是极大的赞赏!!!
tor*_*rek 16
好的,首先,这个:
BRANCH_NAME=$(git branch 2>/dev/null | grep -e ^* | tr -d ' *')
Run Code Online (Sandbox Code Playgroud)
是主要的矫枉过正:-)使用:
branch=$(git symbolic-ref --short HEAD) || ...
Run Code Online (Sandbox Code Playgroud)
获取当前分支名称.之后的部分||是"如果你不在一个分支上该怎么办"(即,如果你处于"超级头"模式) - 你必须自己决定.(您当前的代码将BRANCH_NAME设置为空字符串;为此,您甚至不需要该||部分,但您可能需要添加-q或者a 2>/dev/null,以避免来自symbolic-ref的"致命:"消息.)
其余的只是基本的脚本.在bash中你可以直接使用正则表达式,在旧的sh你可以调用expr或sed.双方sed并tr可以大写-IFY,但用sed可以做一个正则表达式了,所以它看起来像一个很好的候选人:
$ trimmed=$(echo $branch | sed -e 's:^\([^-]*-[^-]*\)-.*:\1:' -e \
'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/')
$ echo $trimmed
TICKET-45
Run Code Online (Sandbox Code Playgroud)
最后,这样做有点危险:
echo "some stuff $(cat $1)" > $1
Run Code Online (Sandbox Code Playgroud)
因为你依赖shell来扩展它$(cat $1)之前它会截断部件的输出文件> $1.(显然它有效,但是你会受到变幻莫测的影响.)最好使用临时文件,或者使用另一个文件,sed但是:
sed -i .bak -e "1s:^:[$trimmed] :" $1
# or use -i '', but note minor warning in sed man pages
Run Code Online (Sandbox Code Playgroud)
以上只是零碎测试,但应该有效.