2015-11-05 3 views
2

Обычно я создаю ветки из сайта с вопросом JIRA. Итак, скажем, мое имя билета JIRA - «SOMEBUG-356: ошибка в программном обеспечении», тогда имя филиала будет: «feature/SOMEBUG-356-bug-in-software».Добавить префикс для фиксации сообщения в SourceTree

Можно ли установить какой-либо шаблон в SourceTree, который добавит префикс для фиксации сообщения с именем билета JIRA филиала, в котором я сейчас? (Он добавил бы префикс SOMEBUG-356, если бы я был на ветке «feature/SOMEBUG-356-bug-in-software»

ответ

3

Я не слишком уверен, что это правильный путь для этого, в моей компании мы используем собственный gitflow при создании ветвей и т. д. Однако во всех коммитах мы применяем регулярное выражение как часть коммита. Вы можете сделать это, перейдя в папку .git проекта и открыв папку hooks, там вы увидите фиксацию -msg.sample файл удалить .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. Если вы затем используете FishEye + Crucible, это может стать невероятно сильным отношением.

+0

Ваше решение должно проверять сообщение, а не устанавливать шаблон, поэтому это неправильный ответ. Вы можете использовать git hooks для добавления валидации, поведения и т. Д. В жизненный цикл git. Вы найдете несколько примеров в одной папке для каждого типа крюка. Существует один под названием 'prepare-commit-msg.sample'. – voiski

+0

Я согласен, что это не правильный ответ, это принудительно проверяет регулярное выражение на фиксации. Ответ можно найти здесь https://stackoverflow.com/questions/5894946/how-to-add-gits-branch-name-to-the-commit-message – Antony

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 выполняет предварительный крюк, когда я открываю вход сообщение? Да, это плохо, потому что это больше похоже на сообщение post-commit. Sourcetree создает интерфейс с git и имеет собственный жизненный цикл. В этом случае поля сообщения не будут взаимодействовать с git, пока вы не нажмете кнопку фиксации. Они могут улучшить его, это не должно быть сложно, но, возможно, у него больше работы, чем я знаю = P

Смежные вопросы