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

моя проблема: cygwin git, похоже, неправильно запрашивает учетные данные при использовании HTTPS: / / url, поэтому я использовал имя пользователя и пароль в URL. К сожалению, когда я сделал "get pull", он автоматически отправил сообщение с полным URL-адресом, включая пароль. Я заметил это только после того, как внес изменения.

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

мой общий репозиторий git находится на моем собственном сервере. Я могу сделать операцию на РЕПО, если необходимый.

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

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

3 ответов


чтобы полностью удалить файл из репозитория 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 поможет вам.


ссылка на удаление конфиденциальных данных на Git-hub полезна. Тем не менее, я нашел инструмент, который был очень straight-foward для использования: Eric Raymond reposurgeon.

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

недостатком является то, что мое старое РЕПО полностью мертв - я изменил историю. Это было бы верно и для использования "Git filter-branch", согласно документам.


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

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

вот и все. Кстати, вы не можете изменить РЕПО, вытащенное до того, как вы сделали выше