Как удалить личную электронную почту из коммитов Git

Git and Shell Scripting

Защита конфиденциальности вашей электронной почты на 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 Файл Java-архива для BFG Repo-Cleaner, упрощающий процесс очистки истории репозитория.
--replace-text Команда BFG Repo-Cleaner для замены определенного текста (адресов электронной почты) в истории репозитория.
git reflog expire Истекает срок действия записей в журнале ссылок, что полезно для очистки ссылок на переписанную историю.
git gc --prune=now Выполняет сборку мусора и немедленно удаляет недоступные объекты, используемые после перезаписи истории.
git commit --amend Вносит изменения в самый последний коммит, добавляя новую информацию об авторе или внося изменения в содержимое коммита.

Удаление личной электронной почты из коммитов Git

Сценарии помогли удалить личную информацию об электронной почте из коммитов Git после объединения запроса на включение. Первый скрипт использует переписать историю коммитов. Эта команда перебирает каждый коммит, проверяя, соответствует ли адрес электронной почты автора или коммиттера старому адресу электронной почты. Если это так, он заменяет его новым анонимным электронным письмом. После перезаписи истории коммитов требуется принудительное нажатие для обновления удаленного репозитория. и Здесь команды имеют решающее значение, чтобы гарантировать, что переписанные коммиты содержат правильную информацию об электронной почте.

Второй скрипт использует , что является более простой и быстрой альтернативой filter-branch. С помощью Команда BFG может заменить все экземпляры старого электронного письма новым на протяжении всей истории хранилища. После замены скрипт выполняет сборку мусора с помощью для очистки любых остаточных данных. Третий скрипт фокусируется на изменении самого последнего коммита, используя 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 для упрощения удаления электронной почты

Использование Java с BFG Repo-Cleaner

# 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, — это использование . Настроив свой клиент Git на использование частного адреса электронной почты, предоставленного GitHub, вы сможете избежать раскрытия своего реального адреса электронной почты при будущих коммитах. Это можно сделать, установив адрес электронной почты в формате . Кроме того, включение конфиденциальности электронной почты в настройках GitHub гарантирует, что ваша личная электронная почта будет использоваться для веб-операций Git.

Для коммитов, которые уже были отправлены и объединены, сопровождающие GitHub имеют ограниченные возможности по изменению исторических данных коммитов. Однако они могут помочь, применяя политики репозитория, которые поощряют или требуют от участников использовать частные электронные письма. В крайних случаях они могут помочь удалить конфиденциальные данные, но обычно это предполагает перезапись истории, что может повлиять на всех участников.

  1. Как я могу предотвратить раскрытие моей электронной почты в будущих коммитах?
  2. Установите адрес электронной почты на в вашей конфигурации Git.
  3. Могу ли я изменить адрес электронной почты для уже отправленных коммитов?
  4. Да, вы можете использовать или переписать историю коммитов и изменить адрес электронной почты.
  5. Какой самый простой способ скрыть мой адрес электронной почты в будущих коммитах?
  6. Настройте свою учетную запись GitHub на использование частного адреса электронной почты и установите адрес электронной почты вашего клиента Git на .
  7. Изменяет ли изменение коммита его историю?
  8. Да, изменяет самый последний коммит, который можно принудительно отправить для обновления репозитория.
  9. Могут ли сопровождающие репозитория изменить информацию о моем коммите?
  10. Специалисты по сопровождению имеют ограниченные возможности изменять историю коммитов, но могут применять политику конфиденциальности для будущих коммитов.
  11. Безопасно ли переписывать историю коммитов?
  12. Переписывание истории может повлиять на сотрудничество, поэтому делать это следует осторожно, в идеале — в контролируемой среде.
  13. Каково влияние насильственных изменений?
  14. Принудительное нажатие может перезаписать историю, что может запутать соавторов, поэтому четко сообщите об этом, прежде чем делать это.
  15. Можно ли обеспечить конфиденциальность электронной почты во всей организации?
  16. Да, организации GitHub могут устанавливать политики и использовать такие инструменты, как для обеспечения конфиденциальности электронной почты.
  17. Что такое крючки перед фиксацией?
  18. Перехватчики перед фиксацией — это сценарии, которые запускаются перед созданием фиксации, гарантируя, что она соответствует определенным критериям, например, использованию частной электронной почты.

Защита вашей личной информации имеет важное значение, особенно при работе с публичными репозиториями. Настроив параметры Git для использования частного адреса и используя такие инструменты, как и вы можете эффективно удалить личные данные из истории коммитов. Хотя сопровождающие репозитория имеют ограниченные возможности по изменению информации о фиксации, они могут поддерживать правила конфиденциальности. Всегда сообщайте своей команде о любых изменениях истории, чтобы избежать путаницы. С помощью этих методов вы можете сохранить свою конфиденциальность, внося свой вклад в проекты с открытым исходным кодом.