Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@superbrothers

Git コミットメッセージに Author と Committer を表示する

ほとんどの状況で Git Author と Committer はグローバルで設定しておけば足りるのだけれど、特定のリポジトリらでだけそれらを切り替えたくて、でもそれを忘れるのでコミットメッセージに Author と Committer を表示して気づけるようにした。

prepare-commit-msg
#!/usr/bin/env bash

# Prepends author and committer lines to the message
AUTHOR_LINE="$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Author: \1/p')"
COMMITER_LINE="$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Committer: \1/p')"
sed -i "0,/^#/s//# ${AUTHOR_LINE}\n# ${COMMITER_LINE}\n#/" "$1"

gitcommit

これは githooks を使って、prepare-commit-msg のタイミングで Author と Committer をコメント文として先頭に追加している。template 機能を使ってそれぞれのリポジトリの .git/hooks/prepare-commit-msg として上記のスクリプトを置いておけば動作する。template はいくつか設定方法があるので下記ドキュメントの中から都合のよいものを選択すればよい。

また既に存在するリポジトリにはスクリプトを配布しないといけない。$HOME/.git-template を template ディレクトリとしており、ghq を使っているなら以下のように配布すればよい。

$ find "$GHQ_ROOT" -name .git -type d -d 4 | xargs -I {} cp "$HOME/.git-template/hooks/prepare-commit-msg" {}/hooks/

当初は pre-commit のタイミングで GIT_AUTHOR_EMAIL 環境変数を書き換えるようにしようとしたのだけれどうまく機能しなかったので表示して気づけるところに落ち着いた。

追記 Tue Dec 13 11:43:52 JST 2016
git commit --amend などコミットメッセージが存在する状況で正しく動作しなかったため、正確にコメント文の先頭に追記されるようにスクリプトを修正しました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?