Chciałbym sprawdzić wiadomość commit przed zatwierdzeniem git. Używam do tego wstępnego zatwierdzenia, ale nie mogłem znaleźć sposobu, aby uzyskać komunikat zatwierdzenia w skrypcie .git/pre-commit. Jak mogę to zdobyć?pobierz wiadomość zatwierdzenia w git hook
Odpowiedz
W haku przed zatwierdzeniem wiadomość zatwierdzenia nie została jeszcze utworzona. Prawdopodobnie chcesz zamiast tego użyć jednego z haków prepare-commit-msg
lub commit-msg
. Jest nice section in Pro Git w kolejności, w której uruchamiane są te zaczepy i co zwykle można z nimi zrobić.
Możesz wykonać następujące czynności w haku pre-receive
(po stronie serwera), a to wyświetli informację o wersji.
old, new, branch = sys.stdin.read().split()
proc = subprocess.Popen(["git", "rev-list", "--oneline","--first-parent" , "%s..%s" %(old, new)], stdout=subprocess.PIPE)
commitMessage=str(proc.stdout.readlines()[0])
Wygląda interesująco. Ale bez żadnej informacji o tym, jaki to jest język lub cokolwiek innego, nie jest to zbyt użyteczne. – conradkdotcom
To jest w Pythonie. – ArekBulski
Zaimplementowałem to w haku commit-msg
. Zobacz documentation.
commit-msg
This hook is invoked by git commit, and can be bypassed with the --no-verify option.
It takes a single parameter, the name of the file that holds the proposed commit log message.
Exiting with a non-zero status causes the git commit to abort.
Pod my_git_project/.git/hooks
dodałem ten plik commit.msg
(musi być to nazwa). W tym pliku dodałem następującą zawartość basha, która dokonała sprawdzenia poprawności.
#!/usr/bin/env bash
INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="^(MYPROJ)-[[:digit:]]+: "
if ! [[ "$START_LINE" =~ $PATTERN ]]; then
echo "Bad commit message, see example: MYPROJ-123: commit message"
exit 1
fi
Należy pamiętać, że są to skrypty po stronie klienta, w przypadku skryptów po stronie serwera może być konieczne użycie opcji 'pre-receive'. –