Git コミットから個人メールを削除する方法

Git コミットから個人メールを削除する方法
Git コミットから個人メールを削除する方法

GitHub で電子メールのプライバシーを保護する

GitHub コミットで個人メールが公開されると、特にパブリック リポジトリで作業する場合、プライバシーの問題が生じる可能性があります。マージされたプル リクエスト (PR) を開いて、個人メールが表示されていることに気付いた場合は、それを非表示にするための措置を講じることが重要です。

このガイドでは、PR のマージ後に電子メール アドレスを一般公開から削除または非表示にするさまざまな方法を説明します。また、メンテナがコミット情報を変更できるかどうか、およびコミットを効果的に修正する方法についても説明します。

指示 説明
git filter-branch コミット履歴を書き換えて、Git リポジトリ内の作成者とコミッターの情報を変更します。
export GIT_AUTHOR_NAME フィルターブランチ操作で書き換えられるコミットの作成者名を設定します。
export GIT_AUTHOR_EMAIL フィルターブランチ操作で書き換えられるコミットの作成者の電子メールを設定します。
wget インターネットからファイルをダウンロードします。ここでは、BFG Repo-Cleaner ツールをダウンロードするために使用されます。
bfg-1.13.0.jar BFG Repo-Cleaner の Java アーカイブ ファイル。リポジトリ履歴のクリーニング プロセスを簡素化します。
--replace-text リポジトリ履歴内の特定のテキスト (電子メール アドレス) を置換する BFG Repo-Cleaner コマンド。
git reflog expire reflog 内のエントリを期限切れにします。これは、書き換えられた履歴への参照をクリーンアップするのに役立ちます。
git gc --prune=now ガベージ コレクションを実行し、履歴を書き換えた後に使用される、到達不能なオブジェクトを直ちに削除します。
git commit --amend 新しい作成者情報またはコミット内容の変更で最新のコミットを修正します。

Git コミットから個人メールを削除する

提供されたスクリプトは、プル リクエストのマージ後に Git コミットから個人の電子メール情報を削除するのに役立ちます。最初のスクリプトでは、 git filter-branch コミット履歴を書き換えます。このコマンドはコミットごとに反復処理を行い、作成者またはコミッターの電子メールが古い電子メールと一致するかどうかを確認します。存在する場合は、それを新しい匿名化された電子メールに置き換えます。コミット履歴を書き換えた後、リモート リポジトリを更新するには強制プッシュが必要です。の export GIT_AUTHOR_EMAIL そして export GIT_COMMITTER_EMAIL ここでは、書き換えられたコミットに正しい電子メール情報が含まれていることを確認するコマンドが重要です。

2 番目のスクリプトは、 BFG Repo-Cleanerこれは、filter-branch のよりシンプルかつ高速な代替手段です。を使用することで、 --replace-text コマンドを使用すると、BFG はリポジトリ履歴全体を通じて、古い電子メールのすべてのインスタンスを新しい電子メールに置き換えることができます。置換後、スクリプトはガベージ コレクションを実行します。 git gc --prune=now 残っているデータをクリーンアップします。 3 番目のスクリプトは、次を使用して最新のコミットを修正することに重点を置いています。 git commit --amendを使用すると、履歴全体を書き換えることなく、作成者情報をすばやく変更できます。

Git Filter-Branch を使用してコミット履歴を書き換える

Git でのシェル スクリプトの使用

#!/bin/sh

# Ensure you have a clean working directory
git checkout main

# Rewrite the commit history to change the author email
git filter-branch --env-filter \
'
OLD_EMAIL="my.personal@email.me"
CORRECT_NAME="My Username"
CORRECT_EMAIL="12345678+username@users.noreply.github.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

# Force push the changes to the repository
git push --force --tags origin 'refs/heads/*'

BFG Repo-Cleaner を使用して電子メールを簡単に削除する

BFG Repo-Cleaner による Java の利用

# Download BFG Repo-Cleaner
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

# Run BFG to replace the old email with the new one
java -jar bfg-1.13.0.jar --replace-text 'my.personal@email.me==12345678+username@users.noreply.github.com' .

# Cleanup and perform garbage collection
git reflog expire --expire=now --all && git gc --prune=now --aggressive

# Push the changes to the remote repository
git push --force

電子メール変更のための最後のコミットの修正

Git コマンドラインを使用した簡単な修正

# Change the email for the last commit
git commit --amend --author="My Username <12345678+username@users.noreply.github.com>"

# Push the amended commit to the repository
git push --force

プルリクエストをマージした後のプライバシーの確保

Git コミットから個人メールを削除しようとするときに考慮すべきもう 1 つの側面は、 GitHub’s personal email settings。 GitHub が提供するプライベート電子メール アドレスを使用するように Git クライアントを構成すると、今後のコミットで実際の電子メールが公開されることを回避できます。これは、電子メールを次の形式に設定することで実行できます。 username@users.noreply.github.com。さらに、GitHub の設定で電子メールのプライバシーを有効にすると、プライベート電子メールが Web ベースの Git 操作に使用されるようになります。

すでにプッシュおよびマージされているコミットの場合、GitHub のメンテナーが履歴コミット データを変更する権限は限られています。ただし、寄稿者にプライベート電子メールの使用を奨励または要求するリポジトリ ポリシーを強制することで役立ちます。極端な場合には、機密データの削除に役立つ可能性がありますが、これには通常、履歴の書き換えが含まれ、すべての投稿者に影響を与える可能性があります。

Git コミットにおける電子メールのプライバシーに関するよくある質問

  1. 今後のコミットで電子メールが公開されるのを防ぐにはどうすればよいですか?
  2. メールアドレスを次のように設定します username@users.noreply.github.com Git 構成内で。
  3. すでにプッシュされたコミットのメールアドレスを変更できますか?
  4. はい、使用できます git filter-branch または BFG Repo-Cleaner コミット履歴を書き換えてメールアドレスを変更します。
  5. 今後のコミットでメールを非表示にする最も簡単な方法は何ですか?
  6. プライベートメールを使用するように GitHub アカウントを構成し、Git クライアントのメールアドレスを次のように設定します。 username@users.noreply.github.com
  7. コミットを修正すると履歴が変わりますか?
  8. はい、 git commit --amend 最新のコミットを変更します。これを強制プッシュしてリポジトリを更新できます。
  9. リポジトリの管理者は私のコミット情報を変更できますか?
  10. メンテナはコミット履歴を変更する能力に制限がありますが、将来のコミットに対してプライバシー ポリシーを強制することができます。
  11. コミット履歴を書き換えても安全ですか?
  12. 履歴の書き換えはコラボレーションに影響を与える可能性があるため、理想的には制御された環境で慎重に行う必要があります。
  13. 強制的な変更はどのような影響を及ぼしますか?
  14. 強制的にプッシュすると履歴が上書きされ、共同作業者が混乱する可能性があるため、強制的にプッシュする前に明確にコミュニケーションをとってください。
  15. 電子メールのプライバシーを組織全体に適用できますか?
  16. はい、GitHub 組織はポリシーを設定し、次のようなツールを使用できます。 pre-commit hooks 電子メールのプライバシーを確​​保するため。
  17. プリコミットフックとは何ですか?
  18. コミット前フックは、コミットが作成される前に実行されるスクリプトであり、プライベートメールの使用など、コミットが特定の基準を満たしていることを確認します。

Git コミットにおける電子メール プライバシーに関する最終的な考え

個人情報を保護することは、特にパブリック リポジトリに貢献する場合には不可欠です。プライベート アドレスを使用するように Git 設定を構成し、次のようなツールを利用する git filter-branch そして BFG Repo-Cleanerを使用すると、コミット履歴から個人データを効果的に削除できます。リポジトリ管理者はコミット情報を変更する権限が限られていますが、プライバシー慣行をサポートできます。混乱を避けるために、履歴の書き換えについては必ずチームに伝えてください。これらの方法を使用すると、オープンソース プロジェクトに貢献しながらプライバシーを維持できます。