Как я могу удалить свою личную электронную почту из вывода `git log --all --format ="% aN <% ae> `? - PullRequest
0 голосов
/ 23 ноября 2018

Я просматривал эту статью: 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 и обновлю их ответом.,Однако, может быть, кто-то здесь сможет мне помочь.

1 Ответ

0 голосов
/ 23 ноября 2018

Попробуйте выполнить ту же команду git filter-branch с -- --all в конце: она позаботится о ветвях и тегах, а также удаленных ссылках.

Затем проверьте результат вашего git log --all

Обратите внимание, что с ветвью фильтра исходные ссылки, если они отличаются от переписанных, будут сохранены в пространстве имен refs/original/: убедитесь, что ваш git log --all не содержит этих ссылок (refs/original): это все равно будет ссылаться на ваш старый адрес электронной почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...