2016-08-05 15 views
1

las ich another post, die eine etwas arbeiten prepare-commit-msg vorgesehen, ich es ein wenig geändert:Wie erstelle ich einen Git-Hook, um Commit-Nachrichten mit dem Branch-Namen voranzustellen?

#!/bin/sh 
# 
# Automatically adds branch name and branch description to every commit message. 
# 
# todo: 
# * breaks merge commit message 
# * breaks git commit --amend 

NAME=$(git branch | grep '*' | sed 's/* //') 
DESCRIPTION=$(git config branch."$NAME".description) 

echo "[$NAME]"' '$(cat "$1") > "$1" 
if [ -n "$DESCRIPTION" ] 
then 
    echo "" >> "$1" 
    echo $DESCRIPTION >> "$1" 
fi 

Unter dem "glücklichen Weg", das heißt:

git add -A 
git commit -m 'Some commit message' 

funktioniert wie erwartet, Ausgang:

some-modular-app git:test-commit-hooks ❯ log | grep 9406dfb 
* 9406dfb - [test-commit-hooks] Make edit (2 hours ago) <mbigras> 

Wie es zwei Fälle gibt, die nicht funktionieren, wenn Sie verwenden:

1.

git commit 

eingeben vim dann die Zeilenumbrüche aus irgendeinem Grund gelöscht werden, die man zwingt die Nachricht zu bearbeiten, um die Kommentare zu ihrem eigenen Spiel zu setzen, wie unten dargestellt:

enter image description here

enter image description here

2.

git commit --amend 

Wird das gleiche Problem wie 1. verursachen, sondern auch prepends es ein zweites [branch-name], auch unter enter image description here

enter image description here

gezeigt Wie konnte ich das Skript ändern, um die Problem Anwendungsfälle 1 und 2 zu lösen?

Dank

+0

Die Antwort ist in [einen Kommentar in derselben Q & A] versteckt (http://stackoverflow.com/questions/5894946/how -to-add-gits-filename-to-the-commit-Nachricht # comment31820573_11524807). Siehe auch http://git-flame.blogspot.com/2013/06/checking-current-branch-programatically.html wie in http://stackoverflow.com/a/1593487/1256452 beschrieben – torek

Antwort

2

Bitte versuchen Sie diesen Schnipsel in Ihrem Haken:

NAME=$(git branch | grep '*' | sed 's/* //') 
echo -n "$NAME"': '|cat - "$1" > /tmp/out && mv /tmp/out "$1"