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

问题描述 投票:4回答:2

我通常从JIRA问题网站创建分支机构。因此,假设我的JIRA票证名称是“SOMEBUG-356:软件中的错误”,那么分支名称将是:“feature / SOMEBUG-356-bug-in-software”。

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

git jira atlassian-sourcetree bitbucket-server
2个回答
3
投票

我不太确定这是否是正确的方法,在我的公司,我们在创建分支时使用本机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

这样做是为了在每次提交时强制使用正则表达式,因为它位于项目.git文件夹中,您可以为每个项目提供自定义挂钩。然后是将原点添加到jira和jira的问题将同步你提交到jira票。如果你然后使用FishEye + Crucible它可以成为一个非常强大的关系。


0
投票

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

使用执行权限.git/hooks/prepare-commit-msg创建文件chmod +x .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.

© www.soinside.com 2019 - 2024. All rights reserved.