Я просматривал эту статью: https://help.github.com/articles/changing-author-info/.
Обратите внимание на предупреждение в верхней части статьи: «Предупреждение. Это действие разрушительно для истории вашего хранилища. Если вы сотрудничаете с хранилищем с помощьюдругие, считается плохой практикой переписывать опубликованную историю. Вы должны делать это только в чрезвычайной ситуации ».«Жаль, что, кажется, нет способа переписать историю, чтобы переписать только электронную почту и / или имя автора.Престижность GitHub за предоставление вектора для нежелательных писем, без возможности изменить это!Похоже, что следующий лучший вариант - изменить электронную почту, уведомить важные контакты и не разрешать пересылку со старой электронной почты на новую.Если вы решите воспользоваться этой опцией, вы также можете включить автоответчик только для людей в ваших контактах (функция, доступная в Gmail, не уверенная в других провайдерах электронной почты), например:
Из-за слишком большого количества электронных писем, в том числе нежелательных, я изменил свой адрес электронной почты и больше не отслеживаю этот адрес.Если вы хотите связаться со мной по поводу чего-то, что может быть очень интересно для меня, пожалуйста, свяжитесь со мной через
Я воспроизведу шаги здесь:
Выполнить:
# It is simplest if you use a repo that you have
# already contributed to.
git clone --bare https://github.com/user/repo.git
cd repo.git
Добавить файл (назовите его, скажем, git-author-rewrite.sh
или gar.sh
)в каталог repo.git
с помощью следующего сценария, заменив OLD_EMAIL
, CORRECT_NAME
и CORRECT_EMAIL
соответствующими значениями:
#!/bin/sh
# gar is short for git-author-rewrite
git filter-branch -f --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.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 -- --exclude="refs/original" --all
# originally this had `-- --branches --tags`, but has been revised as
# per the answer below, and a -f also added.
Добавьте разрешение exec для сценария: chmod +x gar.sh
.Запустите скрипт: ./gar.sh
.
После запуска скрипта и проверки истории во всех ветках с git log --all --format="%aN <%ae>" | sort -u
он все равно показывает мой личный адрес электронной почты.Я получаю спам-сообщения (где в некоторых случаях люди даже упоминают «Я заметил, что вы внесли свой вклад в репо X»), и старался не публиковать мою электронную почту публично (за исключением историй коммитов до тех пор, пока я не перестал использовать мойприват электронная почта на GitHub ).Поэтому мне нужно запустить этот скрипт во всех ветках.Тем не менее, моя личная электронная почта была удалена из выходных данных, если опция --all
была удалена.
Вывод сценария включал несколько строк «ПРЕДУПРЕЖДЕНИЕ: Ref refs/heads/some_branch
без изменений», хотя имеет много «Ref»refs / head / some-branch-name 'было переписано ".
Как я могу удалить свою личную электронную почту из вывода git log --all --format="%aN <%ae>" | sort -u
?Изменить: используйте git log --exclude="refs/original" --all --format="%aN <%ae>" | sort -u
, как предложено в первом ответе.
Я не уверен, почему, но вам нужно запустить скрипт дважды, так как после запуска вышеуказанной команды log после запуска скрипта, когда он все еще выводит мою личную электронную почту.Я предполагаю, что при втором запуске резервная копия перезаписывается, и команда журнала неправильно исключает все резервные копии.
TODO: попробуйте git log --exclude="refs/original/*" --all --format="%aN <%ae>" | sort -u
Редактировать: после отправки изменений на удаленный источник(что было даже с апстримом), он меняет файлы, и я не уверен, почему и как это исправить.
Я также отправил отзыв об этом на GitHub и обновлю их ответом.,Однако, может быть, кто-то здесь сможет мне помочь.