Я не смог найти окончательный ответ на sourcetree, но знаю, что он использует git hooks из репозитория. Это не окончательное решение, а холодная помощь.
Создайте файл .git/hooks/prepare-commit-msg
с правами выполнения chmod +x .git/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
Это будет отлично работать в терминале, но, к сожалению, Sourcetree не покажет это при вводе сообщения фиксации. Sourcetree будет использовать хук только после того, как вы нажмете кнопку фиксации, что приведет к сообщению с карточкой jira в префиксе.
Вы можете пойти дальше и настроить глобальные шаблоны, но это будет действовать только для новых git clones
/git init
. Вам все равно нужно будет скопировать хук для уже существующих клонов. Вот еще один скрипт, который поможет вам в этом путешествии, с помощью эта ссылка:
# 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
person
voiski
schedule
16.02.2018