Я не смог найти окончательный ответ 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 выполняет предварительный крюк, когда я открываю вход сообщение? Да, это плохо, потому что это больше похоже на сообщение post-commit. Sourcetree создает интерфейс с git и имеет собственный жизненный цикл. В этом случае поля сообщения не будут взаимодействовать с git, пока вы не нажмете кнопку фиксации. Они могут улучшить его, это не должно быть сложно, но, возможно, у него больше работы, чем я знаю = P
Ваше решение должно проверять сообщение, а не устанавливать шаблон, поэтому это неправильный ответ. Вы можете использовать git hooks для добавления валидации, поведения и т. Д. В жизненный цикл git. Вы найдете несколько примеров в одной папке для каждого типа крюка. Существует один под названием 'prepare-commit-msg.sample'. – voiski
Я согласен, что это не правильный ответ, это принудительно проверяет регулярное выражение на фиксации. Ответ можно найти здесь https://stackoverflow.com/questions/5894946/how-to-add-gits-branch-name-to-the-commit-message – Antony