• 作成:
  • 更新:

laymanがgit commitのauthorを勝手に上書きしていたので報告と対策

何が起きたか

私は ncaq/ncaq-overlay: ncaq personal gentoo overlay というオーバーレイを作っているのですが, これのコミット作者が自分の表記になっていないことに気がつきました.

どうやらlaymanでaddした場合リポジトリの設定でコミット作者とコミットメールアドレスが書き換えられるようです.

それに気が付かずlaymanの名前とメールアドレスでコミットしていたわけですね.

なんで?

どうやら 433687 – app-portage/layman-2.0.0_rc3: please consider setting dummy username for git の要請を受けて, Add setting the default user name and email when adding new git based… · gentoo/layman@faf6c74 のコミットでデフォルトユーザを設定するようにしたようです.

このバグチケットにはgit pullするのに対してメールアドレスを聞いてくると書いていますが, 私の記憶ではgit cloneとgit pullするのにメールアドレスは必要なかったはずです.

謎. issue作りました. Why do layman overwrite git user name and email? · Issue #47 · gentoo/layman

pre commit hookでの対策は不完全

git configで上書きを無効化するような設定があれば良かったのですが, ざっと調べた所見つかりませんでした.

global hookでnameが上書きされていたらエラーを出すようにしましょう.

#!/usr/bin/env zsh

[[ $(git config user.name) == $(git config --global user.name) &&
       $(git config user.email) == $(git config --global user.email) ]] ||
    (echo "gitのユーザー名がグローバルと違います" &&
         exit 1)

これでglobalと値が異なっていたらエラーでコミットできないようになる. と思ったのですが何故かmagitがhookを実行しません. magit経由でpre.commitを実行しようとしたけどなんかだめだったので、magit-log-edit-mode-hookを利用しようとした話 - by shigemk2 によると数年前からこうらしいですね. と思ったらoverlayの位置がroot必要でroot経由で開いていたのでconfigが反映されてないだけでした.

magitのバグではなかった…

しかしという事はroot権限必要とするものに対してはgit global hookでの対策は不完全ということになります. どう対策しましょう…