コミットのメールアドレスを実際に制御しているもの
コミットの作成者メールアドレスは、そのコミットを作成するマシン上のGit設定によって決まります。GitHubプロフィールに表示されるメールアドレスではありません。GitHubプロフィールのメールは、通知、アカウント復旧、一部のWebインターフェース操作に使われる別の設定です。ターミナルからコミットする場合、コミットオブジェクトに書き込まれるアドレスはローカルのuser.emailの値から取得されます。この区別がすべてです。プロフィールのメールを変更しても今後のコマンドラインコミットには何の影響もなく、ローカルのGit設定を変更してもすでにプッシュされたコミットには何の影響もありません。
Gitの設定は、コマンドラインから作成する今後のコミットに付与されるメールアドレスを制御します。出典
何かを変更する前に、自分が何を監査しているのかを理解してください。GitHubからメールアドレスを消去しようとしているのではありません。これから作成するコミットにどのアドレスを表示させるかを決め、自分のリポジトリの中に旧アドレスへの帰属やツール連携をまだ依存しているものがあるかどうかを見極めようとしているのです。
ステップ1:現在のコミットが持つIDを確認する
まず、最近のコミットに実際に何が含まれているかを見ます。自分の所有するリポジトリで、直近数件のコミットの作成者(author)とコミッター(committer)のメールフィールドを表示するログを実行してください。目的は正確なアドレス文字列を確認することであり、それが機密かどうかを判断することではありません。コマンドラインからプッシュする各リポジトリでこれを行ってください。ローカル設定はリポジトリごとに異なる可能性があるからです。
次に、そのリポジトリでGitが使用する実効設定を確認します。Gitは複数のスコープから設定を解決し、リポジトリレベルの値がグローバルな値より優先されます。見覚えのないアドレスが表示された場合、それはリポジトリローカルの設定、インクルードされた設定ファイル、またはシェルの環境変数に由来する可能性があります。編集する前に見つけた内容を記録してください。再現できない監査は監査とは言えません。
ステップ2:頭の中で2つの設定を分離する
この判断表を使って、プロフィール設定とコミット設定を区別してください。これは自分のアカウントとターミナルで確認できる一般的な仕組みを説明するものであり、特定のメニューラベルや現在のUIパスを主張するものではありません。
| 質問 | 制御しているもの | 変更すると影響するもの | 影響しないもの |
|---|---|---|---|
| GitHubプロフィールに表示されるメールはどれか? | GitHubアカウントのメール設定 | プロフィール表示、通知、アカウント復旧 | ローカルで作成するコミットの作成者メール |
| 新しいコミットに書き込まれるメールはどれか? | ローカルGitのuser.email設定 | そのマシンまたはリポジトリから作成する今後のコミット | すでに作成またはプッシュされたコミット |
| noreplyに切り替えると古いコミットは変わるか? | 自動では何も変わらない | 何も変わらない | 既存のコミットオブジェクトは元の作成者メールを保持する |
| 今後の公開コミットからメールを隠せるか? | ローカルGit設定とnoreplyアドレス | 変更後に作成する新しいコミット | 過去の履歴、フォーク、他所のキャッシュコピー |
この表の実践的な結論:独立した2つのレバーがあります。懸念が今後のプッシュにあるならコミットのレバーを引いてください。プロフィールのレバーにその役割を期待してはいけません。
ステップ3:noreplyアドレスを選び、ローカルで設定する
GitHubはnoreplyアドレスのオプションを提供しています。正確な形式はGitHubが文書化しており、時間とともに変わる可能性があるため、ブログ記事からではなく自分のアカウント設定からアドレスをコピーしてください。入手したら、ワークフローに合ったスコープでコミットメールとして設定します。
安全な手順:
- アカウント設定からGitHub提供のnoreplyアドレスをコピーする。
- スコープを決める:そのマシン上のすべてのリポジトリで使うならグローバルに設定し、異なるIDを期待するプロジェクトに貢献するならリポジトリごとに設定する。
- 選んだスコープで
git configを使って設定を適用する。 - スクラッチブランチでテストコミットを作成し、プッシュする前にその作成者メールを確認する。
- テストコミットにnoreplyアドレスが表示されてから初めてプッシュする。
GitHubはnoreplyアドレスのオプションを提供していますが、設定済みアドレスを変更しても既存のコミットは書き換えられません。出典
2番目の点が見落とされがちです。noreplyへの切り替えは将来に向けた制御です。既存のコミットを書き換えることはなく、すでに公開されているコミットオブジェクトから古いアドレスを削除することもありません。リポジトリがフォークまたはミラーリングされている場合、それらのコピーは今日何を設定しても元のコミットデータを保持します。
ステップ4:Webインターフェースとツールの動作を別途確認する
GitHubのWebインターフェース経由、またはボットや連携によって作成されたコミットは、ローカルターミナルとは異なるID経路を使う場合があります。ローカル設定の変更がリポジトリに届くすべてのコミットをカバーすると仮定しないでください。異なるソースからのコミットの作成者フィールドを確認し、どれを直接制御しているかを把握してください。制御していない連携については、正直なところ、ノートPCからそのコミットIDを設定することはできません。その連携を使い続けるかどうかを決めることしかできません。
ステップ5:古い履歴をどうするかを決める
現実的な選択肢は3つあり、そのどれも「古い露出を消し去る」ものではありません。
| 選択肢 | 何をするか | コストと限界 |
|---|---|---|
| 履歴をそのままにする | クローンや参照を壊すリスクがない | 古いコミットは元の作成者メールを保持する |
| 自分のリポジトリで履歴を書き換える | そのリポジトリ内で今後のコミットオブジェクトを変更する | 書き換えは破壊的で、フォークやミラーには届かず、ほとんどのユーザーには範囲外 |
| 露出したアドレスを削除またはローテーションする | アドレスがまだ有効なら今後の露出を減らす | すでにそれを含むコミットは変更しない |
ほとんどの読者にとって正しい動きは1番目か3番目です。新しいコミットにアドレスを追加するのを止め、古いコミットは永久に公開されているものとして扱ってください。露出したアドレスがログインや復旧にまだ使っているものであるなら、そのアドレスをアカウントに関連付けたままにすべきかどうかを検討してください。それはアカウントセキュリティの決定であり、Git設定の決定ではありません。
よくある間違い
- プロフィールのメールを変更すればコミットも直ると仮定する。 プロフィール設定とコミットIDは別物です。ローカルGit設定を変更するまで、今後のターミナルコミットは古いアドレスを運び続けます。
- リポジトリの上書きを確認せずにnoreplyをグローバルに設定する。 リポジトリローカルの
user.emailがグローバル値より優先されます。プッシュする各リポジトリを監査してください。 - テストコミットを公開ブランチにプッシュする。 プッシュする前にスクラッチブランチまたはローカルログで作成者メールを確認してください。
- noreplyへの切り替えで履歴が消去されると信じる。 既存のコミットを書き換えることはなく、フォーク、ミラー、キャッシュコピーには届きません。
- すべてのコミットソースが自分の制御下にあると仮定する。 Webインターフェースのコミットや連携のコミットは異なるIDを使う場合があります。仮定せずに確認してください。
- プロフィールの編集を削除とみなす。 プロフィールの表示内容を変更しても、保存データは削除されず、コミットオブジェクトも変更されません。
自分の足跡を守る
コミットメールは狭いチャネルの1つにすぎません。公開されている足跡には、そのアドレスに紐づく他のプラットフォーム上のハンドルやプロフィールも含まれます。アドレスがどこかで公開されたために監査しているなら、次に役立つのは、そのアドレスに関連する公開アカウントを確認することです。TruthsSeekの「メールアドレスにリンクされたアカウントを見つける方法」ガイドではそのレビュー手順を説明しており、/find/github/のGitHubルックアップページは既知のハンドルを確認する出発点になります。TruthsSeekが取り上げているアプリTraceSeekは、ユーザー名を3,000+のプラットフォームで照合し、初回スキャンを無料で提供しています。製品によるとスキャンには20–30秒かかります。これらのツールは公開されている一致を手がかりとして提示するものであり、所有の証明ではなく、プラットフォーム設定を変更したり非公開記録を露出したりすることもありません。すでに公開されているものを把握するために使い、設定変更はプラットフォーム側で行ってください。
現実的なルーチン:ローカルGit IDを一度修正し、テストコミットで確認し、その後は新しいツールやマシンからのコミットの作成者フィールドを定期的に再確認してください。プッシュされたすべてのコミットは永久に公開されるデータとして扱ってください。実際、通常はそうなっているからです。
重要な事実
- Gitの設定は、コマンドラインから作成する今後のコミットに付与されるメールアドレスを制御します。
- GitHubはnoreplyアドレスのオプションを提供していますが、設定済みアドレスを変更しても既存のコミットは書き換えられません。
- GitHubプロフィールのメール設定とローカルGitのコミットメール設定は、異なる効果を持つ別々の制御です。
- TraceSeekはユーザー名を3,000+のプラットフォームで照合し、初回スキャンを無料で提供しており、製品によるとスキャン時間は20–30秒です。
- 公開ユーザー名の一致は手がかりであり、アカウント所有の証明ではありません。