我通常从JIRA问题站点创建分支。假设我的JIRA票据名称是“SOMEBUG-356:软件中的错误”,那么分支名称将是:“feature/SOMEBUG-356-bug-in-software”。在SourceTree中添加前缀提交消息
是否有可能将某种模板设置为SourceTree,它将添加一个前缀来提交具有我当前所在分支的JIRA票据名称的消息? (它会添加SOMEBUG-356前缀,如果我在分支上“功能/ SOMEBUG-356-bug-in-software”
我通常从JIRA问题站点创建分支。假设我的JIRA票据名称是“SOMEBUG-356:软件中的错误”,那么分支名称将是:“feature/SOMEBUG-356-bug-in-software”。在SourceTree中添加前缀提交消息
是否有可能将某种模板设置为SourceTree,它将添加一个前缀来提交具有我当前所在分支的JIRA票据名称的消息? (它会添加SOMEBUG-356前缀,如果我在分支上“功能/ SOMEBUG-356-bug-in-software”
我不太确定这是否是正确的方式去做,在我的公司我们在创建分支时使用本地gitflow等。但是在所有提交中,我们强制执行正则表达式作为提交的一部分。您可以通过转到项目的.git文件夹并打开钩子文件夹来执行此操作,在那里您会看到提交-msg.sample文件中删除。样品所以说,提交 - 味精。在这个文件中加入类似。
#!/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
这样做是强制执行所有提交的正则表达式,因为它是在你的项目的.git文件夹你可以为每个项目定制钩子。 其中那么将原产地添加到jira和jira将同步您提交给jira ticket。 如果您使用FishEye +坩埚,它可以成为一个令人难以置信的强大关系。
我找不到sourcetree的最终答案,但我知道它使用了存储库中的git hooks。这不是最终的解决方案,而是寒冷的帮助。
创建执行权chmod +x .git/hooks/prepare-commit-msg
的文件.git/hooks/prepare-commit-msg
,并根据this one使用以下代码作为示例。你可以在互联网上找到更多的例子。
#!/bin/bash
COMMIT_MSG_FILE=$1
BRANCH_NAME=$(git symbolic-ref --short HEAD | sed 's/\(.*-[0-9]*\).*/\1/')
BRANCH_NAME="${BRANCH_NAME##*/}"
if [ -n "$BRANCH_NAME" ] &&
[ $(head -1 ${COMMIT_MSG_FILE}|grep -c "${BRANCH_NAME}") = 0 ]
then
sed -i.bak -e "1s/^/${BRANCH_NAME} /" ${COMMIT_MSG_FILE}
fi
这将工作完美的终端,但可悲的是Sourcetree不会显示它在提交信息输入。只有当你点击提交按钮后,Sourcetree才会使用该钩子,这会导致带有前缀为jira卡的消息。
您可以进一步配置全局模板,但仅对新的git clones
/git init
生效。您仍然需要复制已存在克隆的钩子。这里更多的一个脚本这将帮助你在这个旅程中,来自this link一些帮助:
# Creating file on your home folder
mkdir -p ~/.git-templates/hooks
cat << 'EOF' > ~/.git-templates/hooks/prepare-commit-msg
#!/bin/bash
COMMIT_MSG_FILE=$1
BRANCH_NAME=$(git symbolic-ref --short HEAD | sed 's/\(.*-[0-9]*\).*/\1/')
BRANCH_NAME="${BRANCH_NAME##*/}"
if [ -n "$BRANCH_NAME" ] &&
[ $(head -1 ${COMMIT_MSG_FILE}|grep -c "${BRANCH_NAME}") = 0 ]
then
sed -i.bak -e "1s/^/${BRANCH_NAME} /" ${COMMIT_MSG_FILE}
fi
EOF
chmod +x ~/.git-templates/hooks/prepare-commit-msg
# Use this line to config as default for all new git clones/init
git config --global init.templatedir '~/.git-templates'
# Use this line to create a alias to install this hook on existing local git repos
echo "
alias git_install_commit_template_hook='ln -s ~/.git-templates/hooks/prepare-commit-msg .git/hooks/prepare-commit-msg'
" >> ~/.bash_aliases
source ~/.bash_aliases
为什么当我打开信息输入不sourcetree执行前的钩?是的,这很糟糕,因为它听起来更像是一个提交后的消息。 Sourcetree与git建立了一个接口,并拥有自己的生命周期。在这种情况下,消息字段不会与git交互,直到您点击提交按钮。他们可以改进它,它不应该很难,但也许它有更多的工作比我知道= P
您的解决方案是验证消息,而不是设置模板,所以它不是正确的答案。您可以使用git挂钩将验证,行为等添加到git生命周期。您会在同一个文件夹中找到每种类型钩子的一些示例。有一个名为'prepare-commit-msg.sample'的文件。 – voiski
我同意这不是正确的答案,这强制执行提交的正则表达式检查。答案可以在这里找到https://stackoverflow.com/questions/5894946/how-to-add-gits-branch-name-to-the-commit-message – Antony