2015-11-05 531 views
2

我通常從JIRA問題站點創建分支。假設我的JIRA票據名稱是「SOMEBUG-356:軟件中的錯誤」,那麼分支名稱將是:「feature/SOMEBUG-356-bug-in-software」。在SourceTree中添加前綴提交消息

是否有可能將某種模板設置爲SourceTree,它將添加一個前綴來提交具有我當前所在分支的JIRA票據名稱的消息? (它會添加SOMEBUG-356前綴,如果我在分支上「功能/ SOMEBUG-356-bug-in-software」

回答

3

我不太確定這是否是正確的方式去做,在我的公司我們在創建分支時使用本地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 +坩堝,它可以成爲一個令人難以置信的強大關係。

+0

您的解決方案是驗證消息,而不是設置模板,所以它不是正確的答案。您可以使用git掛鉤將驗證,行爲等添加到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。這不是最終的解決方案,而是寒冷的幫助。

創建執行權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