Вопрос по github, git – «Git filter-branch» успешно используется для изменения коммиттера / автора, но изменения не отражаются на github

6

Я недавно заменил автора, коммиттера и его электронные письма во всех моих локальных коммитах, используя следующую команду:

git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi

if [ "$GIT_AUTHOR_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi
' -- --all

Обновления сразу становятся очевидными локально (например, в моей среде SourceTree). Однако после принудительной отправки измененного репозитория в GitHub…

git push -f origin master

... два отдельных пунктов упорно отказываются от их коммиттер и автор обновление: файл Gemfile.lock и каталог Просмотров

Пожалуйста, обратите внимание, что:

Это второй раз, когда я выполняю такую операцию над этим хранилищем. Я считаю, что не сталкивался с такими проблемами в первый раз.

В поисках моего старого имени в хранилище…

$ find . "<oldname">

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

Тогда мой вопрос: как я могу изменить коммиттера / автора двух "упрямых" файлов на GitHub?

Что вы имеете в виду, когда говорите, что Gemfile.lock и Views "отказываются обновлять автора и автора"? Только коммиты имеют коммиттер и автор, а не деревья и капли. Кроме того, ветвь фильтра, которую вы запустили, не будет ничего делать с файлами с именем «oldname». Кроме того, это может помочь опубликовать URL github. Max Nanasy
Возможно, GitHub кеширует эту информацию? Приносит ли репо новую ветку или новую репо ту же проблему? Vladimir Panteleev

Ваш Ответ

2   ответа
5

git по-прежнему сохраняет резервную копию истории репо в refs / original. Это так, что если вы что-то испортили с помощью filter-branch, вы можете вернуться, если это будет необходимо. Убедившись, что все прошло гладко, вы можете удалить резервную копию ссылки с помощью:

git update-ref -d refs/original/refs/heads/master

По какой-то причине github по-прежнему требуется дополнительная фиксация для отражения изменений. Я добавлю пробел или что-то в readme, зафиксирую и нажму ... после этого github отображает правильных авторов на странице проекта.

0

чтобы определить автора строки? Вероятно, он либо кэширован, либо вы просматриваете что-то конкретное для старого коммита SHA1.

Вы можете проверить, что это работает, выполнив новый клон репозитория и проверивgit blame filename для этих двух файлов. Если это показывает правильного автора, то это сработало.

Похожие вопросы