[Git] 別のユーザーとしてコミットする方法

Gitで別ユーザーとしてコミットする方法について書きました。

はじめに

データアナリティクス事業本部のおざわです。娘の成長を日々実感している今日このごろです。

Gitを使用する場合、基本的にローカルのリポジトリは1人で操作すると思います。ただ、業務や状況によっては、共有のマシンや別の方のPCを使ったりと複数人で使う場合もあります。そんなときに一時的に別ユーザーとしてコミットする方法と複数人で1つのローカルリポジトリを操作する場合の設定について共有したいと思います。

Gitの設定ファイルについて

最初にGitの設定ファイルについておさらいします。

Gitには3つの設定ファイルがあり、それぞれに適用範囲(スコープ)があります。システム全体に適用されるsystem、各ユーザーのglobal、 各リポジトリのlocalです。設定ファイルのパスはご利用のOSによって異なりますが、以下はMacOSの場合です。

system

システムの全ユーザー、全リポジトリ向けの設定が記述されます。

  • 適用範囲:システム全体
  • 設定ファイルのパス:/private/etc/gitconfig

global

Gitを利用する各ユーザーの設定ファイルになります。

  • 適用範囲: Gitを利用するユーザー単位
  • 設定ファイルのパス: $HOME/.gitconfig

local

使用中のローカルリポジトリに対する設定が記述されます。

  • 適用範囲:現在使用中のリポジトリ
  • 設定ファイルのパス: .git/config

Gitはこれらの設定ファイルをsystem、global、localと適用範囲が狭くなっていく順番で読み込みます。複数ファイルに同じ設定項目が存在する場合は、あとから読んだ設定ファイルの値が優先されます。

設定の変更

以下のように適用範囲、設定する項目名、値の順で指定します。適用範囲はlocalがデフォルトです。 例として、現在のユーザーのユーザー名を設定する場合は以下のようにします。

git config --global user.name "Test Test"

設定可能な項目はこちらのページに記載されています。

authorを変更する

別ユーザーとしてコミットする方法です。git logで表示されるauthorを一時的に変更するには、以下のようにauthorオプションに名前とメールアドレスを文字列で渡します。

git commit -m "another commit" --author="Test Test<test.test@example.com>"

author, committerを変更する

commiterについても一時的に変更したい場合は以下のようにすると変更できます。

GIT_COMMITTER_NAME="Test Test" GIT_COMMITER_EMAIL="test.test@example.com" git commit -m "another commit" --author="Test Test<test.test@example.com>"

ちなみにauthorとcommiterの違いはドキュメントに以下の記載があります。

2.3 Gitの基本 - コミット履歴の閲覧

authorcommitter は何が違うのか気になる方もいるでしょう。 authorとはその作業をもともと行った人、committerとはその作業を適用した人のことを指します。 あなたがとあるプロジェクトにパッチを送り、コアメンバーのだれかがそのパッチを適用したとしましょう。 この場合、両方がクレジットされます (あなたがauthor、コアメンバーがcommitterです)。

シェルに関数を登録する

継続的に複数人で1つのローカルリポジトリを操作する場合、こちらのブログにあるようにシェルの関数を登録しておくと、より手軽に実行できます。

.bashrc

git_a(){
  COMMITTER_NAME="Test UserA"
  COMMITTER_EMAIL="test_user_a@example.com"
  echo "
    Running:
    GIT_COMMITTER_NAME=\"$COMMITTER_NAME\" GIT_COMMITTER_EMAIL=\"$COMMITTER_EMAIL\" git $@ --author \"$COMMITTER_NAME <$COMMITTER_EMAIL>\"
  "
  GIT_COMMITTER_NAME="$COMMITTER_NAME" \
  GIT_COMMITTER_EMAIL="$COMMITTER_EMAIL" \
  git $@ \
  --author "$COMMITTER_NAME <$COMMITTER_EMAIL>"
}

登録したあとは以下のように使用できます。

git_a commit -m 'hoge'

    Running:
    GIT_COMMITTER_NAME="Test UserA" GIT_COMMITTER_EMAIL="test_user_a@example.com" git commit -m hoge --author "Test UserA <test_user_a@example.com>"

[main 1234567] hoge

git log
commit 1234567890fbb07906b16ba3ae9ece4e703b57b6 (HEAD -> main)
Author: Test UserA <test_user_a@example.com>
Date:   Tue Jun 20 10:23:32 2023 +0900

    hoge

おわりに

以上、別ユーザーとしてコミットする方法についてご紹介しました。 どなたかの参考になれば幸いです。

参考リンク