Git 添加前缀以在SourceTree中提交消息

Git 添加前缀以在SourceTree中提交消息,git,jira,atlassian-sourcetree,bitbucket-server,Git,Jira,Atlassian Sourcetree,Bitbucket Server,我通常从JIRA发布站点创建分支。假设我的JIRA票证名称是“SOMEBUG-356:Bug-in-software”,那么分支名称将是:“feature/SOMEBUG-356-Bug-in-software” 是否可以为SourceTree设置某种模板,该模板将添加一个前缀,以提交我当前所在分支的名为JIRA票证的消息?(如果我在“feature/SOMEBUG-356-bug-in-software”分支上,它会添加SOMEBUG-356前缀)我不太确定这是否正确,在我的公司,我们在创建分

我通常从JIRA发布站点创建分支。假设我的JIRA票证名称是“SOMEBUG-356:Bug-in-software”,那么分支名称将是:“feature/SOMEBUG-356-Bug-in-software”


是否可以为SourceTree设置某种模板,该模板将添加一个前缀,以提交我当前所在分支的名为JIRA票证的消息?(如果我在“feature/SOMEBUG-356-bug-in-software”分支上,它会添加SOMEBUG-356前缀)

我不太确定这是否正确,在我的公司,我们在创建分支等时使用本机gitflow。但是在所有提交中,我们强制使用正则表达式作为提交的一部分。您可以通过转到项目的.git文件夹并打开hooks文件夹来实现这一点,在那里您将看到一个commit-msg.sample文件删除.sample所以它说commit msg。在这个文件中添加类似的内容

#!/usr/bin/env bash


# regex to validate in commit msg
commit_regex='(SOMEBUG|SOMEOTHERBUG)-[0-9]{0,6}\w+'
error_msg="Aborting commit. Your commit message is missing a valid JIRA Issue key and number. An example commit would be SOMEBUG-1234"

if ! grep -iqE "$commit_regex" "$1"; then
    echo "$error_msg" >&2
    exit 1
fi
这样做的目的是在每次提交时强制执行正则表达式,因为它位于project.git文件夹中,所以可以为每个项目设置自定义挂钩。 然后,将源代码添加到jira,jira将同步您对jira票证的承诺。
如果您使用FishEye+Crucible,它将成为一种难以置信的强大关系。

我无法找到sourcetree的最终答案,但我知道它使用了存储库中的。这不是最终解决方案,而是冷帮助

创建具有执行权限的文件
.git/hooks/prepare commit msg
,并使用以下代码作为基于的示例。您可以在internet上找到更多示例

!/bin/bash
提交消息文件=$1
分支名称=$(git符号参考——短头| sed's/\(.*-[0-9]*\)./\1/'))
BRANCH_NAME=“${BRANCH_NAME##*/}”
如果[-n“$BRANCH_NAME”]&&
[$(head-1${COMMIT\u MSG\u FILE}grep-c“${BRANCH\u NAME}”)=0]
然后
sed-i.bak-e“1s/^/${BRANCH_NAME}/“${COMMIT_MSG_FILE}”
fi
这将在终端中完美地工作,但遗憾的是Sourcetree不会在提交消息输入上显示它。只有在您点击提交按钮后,Sourcetree才会使用钩子,该按钮将生成前缀为jira卡的消息

您可以进一步配置全局模板,但它只对新的
git克隆生效
/
git init
。您仍然需要为现有克隆复制钩子。这里有一个以上的脚本可以帮助您完成此过程,并提供以下帮助:

#在主文件夹中创建文件
mkdir-p~/.git模板/挂钩
cat~/.git模板/挂钩/准备提交消息
#!/bin/bash
提交消息文件=$1
分支名称=$(git符号参考——短头| sed's/\(.*-[0-9]*\)./\1/'))
BRANCH_NAME=“${BRANCH_NAME##*/}”
如果[-n“$BRANCH_NAME”]&&
[$(head-1${COMMIT\u MSG\u FILE}grep-c“${BRANCH\u NAME}”)=0]
然后
sed-i.bak-e“1s/^/${BRANCH_NAME}/“${COMMIT_MSG_FILE}”
fi
EOF
chmod+x~/.git模板/挂钩/准备提交消息
#使用此行将所有新git克隆/init配置为默认值
git config--全局init.templatedir'~/.git templates'
#使用此行创建别名,以便在现有本地git Repo上安装此挂钩
回声“
别名git\u install\u commit\u template\u hook='ln-s~/.git templates/hooks/prepare commit msg.git/hooks/prepare commit msg'
“>>~/.bash\u别名
source~/.bash_别名

当我打开消息输入时,sourcetree为什么不执行预钩子?是的,这很糟糕,因为它听起来更像是提交后消息。sourcetree与git建立了接口,并具有自己的生命周期。在这种情况下,在您点击提交按钮之前,消息字段不会与git交互。它们可以对其进行改进,但不应该是be很难,但可能它比我知道的要多=P

您的解决方案是验证消息,而不是设置模板,因此这不是正确的答案。您可以使用git钩子向git生命周期添加验证、行为等。对于每种类型的钩子,您可以在同一文件夹中找到一些示例。存在一个名为
prepare-commit-msg.sa的示例mple
。我同意这不是正确的答案,这会在提交时强制执行正则表达式检查。答案可以在这里找到