Как мне отредактировать прошлые git коммиты, чтобы удалить мой пароль из журналов коммитов?

Моя проблема: Cygwin Git, похоже, неправильно запрашивает учетные данные при использовании https:// URL, поэтому я использовал имя пользователя и пароль в URL. К сожалению, когда я сделал "получить тягу", он автоматически отправил сообщение с полным URL-адресом, включая пароль. Я не замечал этого до тех пор, пока не внес изменения.

Как мне отредактировать старые сообщения коммита, чтобы уничтожить пароль в URL?

Мой общий репозиторий Git находится на моем собственном сервере. При необходимости я могу сделать операцию на репо.

Инструкции о том, как изменить мою конфигурацию (т.е. не используйте Cygwin, не используйте https), не нужны - я пытаюсь разобраться с тем, что уже сделано.

Да, я могу и сожгу пароль, но я все еще хотел бы его исправить.

3 ответа

Решение

Ссылка на удаление конфиденциальных данных на git-hub полезна. Тем не менее, я нашел инструмент, который был очень прост в использовании: Эрик Реймонд, репохирург.

Этот инструмент позволил мне легко импортировать мое репо, перечислить коммиты с проблемой, отредактировать их (я сделал это индивидуально) и записать поток быстрого импорта git моего репо. Я импортировал этот поток в новый репозиторий и rsync'd его на место.

Недостатком является то, что мой старый репо полностью мертв - я изменил историю. Это также верно для использования "git filter-branch", согласно документации.

Чтобы полностью удалить файл из репозитория git и его историю, используйте эти команды.

# Check out the remote repo
git clone git://host/path/repo.git
cd repo

# Clobber the file in your checkout
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch file-to-purge.txt' --prune empty --tag-name-filter cat -- --all

# Make sure you don't accidentally commit the file again
echo file-to-purge.txt >> .gitignore
git add .gitignore
git commit -m "Prevent accidentally committing this again" .gitignore

# Push the edited repo. This will break other people's clones, if any.
git push origin master --force

Для получения дополнительной информации, удалить руководство по конфиденциальным данным на GitHub поможет вам.

Если вы можете редактировать сервер, вы можете сбросить заголовок ветки на предыдущий (HEAD^).

  • Прежде всего, получите хэш HEAD ^, к которому вы хотите "вернуться".
  • перейдите в (каталог git пустого репозитория на сервере)/refs/head, перейдите в пользовательский git (или любой другой git), запустите "echo (hash) > (имя ветви)" для сброса.

это все. Кстати, вы не можете изменить сделанное репо до того, как вы сделали выше

Другие вопросы по тегам