Gitのアカウント情報をプロジェクトごとに分ける

開発環境

gitでコミット等に反映されるユーザ情報は3段階で管理されているようです。
system, global, local の3段階。
より細かい粒度の方が優先的に利用されます。

通常はsystem単位(PC単位)でgitアカウントを変えるケースより、User単位で返るケースの方が圧倒的に多く、global設定に値を持たせてると思います。

現在のユーザ情報を見るには以下をで表示できます。

git config user.name
git config user.email

コンフィグファイルの中身を丸ごと見たい場合は

git config --list

このコンフィグファイルは以下の場所に配置されています。
C:\Users\[username]\.gitconfig

省略しますが、ファイルの中身はこんな感じです。

[user]
	name = uname
	email = email@email.com

アカウントを分けたい

さて、ここで問題になるのは、主に会社のアカウントでGITを利用するけど、
自分のアカウントで自分の個人リポジトリにもコミットしたいし、
他社と協力している場合は別のGITアカウントでコミットしたい、というケースです。

実はプロジェクト単位でアカウント情報を保持することができ、
project\.git\config
↑ファイルに前述の.gitconfigと類似の情報が書かれています。

これを手で書き換える or 下のコマンドで書き換えると、以後はそのプロジェクトでは.gitのコンフィグが参照されます。

git config --local user.name "username"
git config --local user.email "email"

もし名前を間違えてコミットしちゃったら?

個人プロジェクトだけでしか使えない手法ですが、
以下のコマンドで全てのAuthorとCommiterの名前を書き換えます。

git filter-branch -f --env-filter "
    GIT_AUTHOR_NAME='my_name'
    GIT_AUTHOR_EMAIL='12345689+username@users.noreply.github.com'
    GIT_COMMITTER_NAME='my_name'
    GIT_COMMITTER_EMAIL='12345689+username@users.noreply.github.com'
  " HEAD

そして禁断のforce pushしてブランチを丸ごと上書きして終了です。

git push --force

コメント