What is GIT Hooks.
Git hooks are scripts those run automatically every time a specific event occurs in a Git repository. You can customize Git’s internal behavior and actions at key points in the development life cycle.
Here i am going to describe how can we change default behavior of hooks.
I am changing prepare-commit-msg hook’s functionality .
These are following step :-
1- You can find default hooks available in directory /repoName/.git/hooks/ .
2. Rename hook’s name from prepare-commit-msg-sample to prepare-commit-msg.
Default behavior of this hooks is only display four parameter .
– Commit hash-code..
– Author Name .
– Date.
– Commit Message .
See following image for default behavior .
4 . Now what i want , I want to append branch name with commit message . For this i have to write following script in prepare-commit-msg file .
1 2 3 4 5 6 7 8 9 10 11 |
[code] 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 [/code] |
After overall editing my file will be look like this .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac 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 #SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Sign By: \1/p') #grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" |
5 – From now whenever you will commit file ,you will get following type of log record with branch name .
Here you can see Branch name with commit message .
Recent Comments