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 여기서 명령은 다시 작성된 커밋에 올바른 이메일 정보가 있는지 확인하는 데 중요합니다.

두 번째 스크립트는 다음을 활용합니다. , 이는 필터 분기에 대한 더 간단하고 빠른 대안입니다. 을 사용하여 --replace-text 명령을 사용하면 BFG는 저장소 기록 전체에서 이전 이메일의 모든 인스턴스를 새 이메일로 바꿀 수 있습니다. 교체 후 스크립트는 다음을 사용하여 가비지 수집을 수행합니다. git gc --prune=now 잔여 데이터를 정리합니다. 세 번째 스크립트는 다음을 사용하여 가장 최근 커밋을 수정하는 데 중점을 둡니다. git commit --amend, 전체 기록을 다시 쓰지 않고도 작성자 정보를 빠르게 변경할 수 있습니다.

Git 필터 분기를 사용하여 커밋 기록 다시 쓰기

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 커밋에서 개인 이메일을 제거하려고 할 때 고려해야 할 또 다른 측면은 다음을 사용하는 것입니다. GitHub’s personal email settings. GitHub에서 제공하는 개인 이메일 주소를 사용하도록 Git 클라이언트를 구성하면 향후 커밋에서 실제 이메일이 노출되는 것을 방지할 수 있습니다. 이메일을 다음 형식으로 설정하면 됩니다. username@users.noreply.github.com. 또한 GitHub 설정에서 이메일 개인 정보 보호를 활성화하면 개인 이메일이 웹 기반 Git 작업에 사용됩니다.

이미 푸시되고 병합된 커밋의 경우 GitHub의 관리자는 기록 커밋 데이터를 변경할 수 있는 권한이 제한되어 있습니다. 그러나 기여자가 개인 이메일을 사용하도록 장려하거나 요구하는 저장소 정책을 시행함으로써 도움을 줄 수 있습니다. 극단적인 경우 민감한 데이터를 제거하는 데 도움이 될 수 있지만 일반적으로 이 작업에는 기록 재작성이 포함되어 모든 기여자에게 영향을 미칠 수 있습니다.

Git 커밋의 이메일 개인 정보 보호에 대해 자주 묻는 질문

  1. 향후 커밋에서 내 이메일이 노출되는 것을 방지하려면 어떻게 해야 합니까?
  2. 이메일을 다음으로 설정하세요. username@users.noreply.github.com Git 구성에서.
  3. 이미 푸시된 커밋의 이메일을 변경할 수 있나요?
  4. 예, 사용할 수 있습니다 git filter-branch 또는 커밋 기록을 다시 작성하고 이메일을 변경합니다.
  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 그리고 , 커밋 기록에서 개인 데이터를 효과적으로 제거할 수 있습니다. 저장소 관리자는 커밋 정보를 변경할 수 있는 권한이 제한되어 있지만 개인 정보 보호 관행을 지원할 수 있습니다. 혼란을 피하기 위해 기록 재작성 내용을 항상 팀과 소통하세요. 이러한 방법을 사용하면 오픈 소스 프로젝트에 기여하면서 개인 정보를 보호할 수 있습니다.