Изменение пользователя git в локальной ветке перед отправкой на удаленный - PullRequest
0 голосов
/ 01 марта 2019

Я нахожусь в следующей ситуации:

Мне дали машину для разработки со всеми репозиториями, привязанными к чужим учетным данным git.Я создал новую локальную ветку, сделал несколько коммитов через 9 или 10 репо.Теперь у меня есть учетная запись на git-сервере компании, и я хочу перенести свою локальную ветку на удаленный сервер (та же ветка, там не нужно ничего менять).

Однако мне нужно, чтобы все коммиты были сделаны мной, а не другим человеком, который использовал этот ноутбук до меня.

Есть ли способ сделать это?Нужно ли мне как-то возвращаться назад и менять пользователя, связанного со всеми этими локальными коммитами, на себя и, если да, как я могу это сделать?Открыт для взлома при необходимости.

1 Ответ

0 голосов
/ 01 марта 2019

Checkout GitHub script для "изменения информации об авторе":

Чтобы изменить имя и / или адрес электронной почты, записанные в существующих коммитах, вы должны переписать всю историю своегоGit-репозиторий.

Предупреждение: это действие разрушительно для истории вашего репозитория.Если вы сотрудничаете в хранилище с другими, переписывать опубликованную историю считается плохой практикой.Вы должны делать это только в чрезвычайной ситуации.

Изменение истории Git вашего репозитория с помощью скрипта

Мы создали скрипт, который будет изменять любые коммиты, которые ранее имели старыйадрес электронной почты в полях автора или коммиттера, чтобы использовать правильное имя и адрес электронной почты.

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

Перед запуском этого сценария вам потребуется:

  • Старый адрес электронной почты, который появляется в полях автора / коммиттера, которые вы хотите изменить
  • Правильное имя и адрес электронной почты, к которым вы хотели бы, чтобы такие коммиты были приписаны

Инструкции:

  1. Открыть терминал.

  2. Создать свежий, чистый клон вашего хранилища:

git clone --bare https://github.com/user/repo.git`
cd repo.git
Скопируйте и вставьте скрипт, заменив следующие переменные на основе собранной вами информации:
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL
#!/bin/sh

git filter-branch --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 -- --branches --tags

Нажмите Введите для запуска сценария.

Просмотрите новую историю Git на наличие ошибок.

Перенесите исправленную историю в GitHub:

git push --force --tags origin 'refs /head / *'

Очистите временный клон:

cd ..
rm -rf repo.git
...