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

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

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

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

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

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


person Dewey Sasser    schedule 06.12.2011    source источник
comment
см. здесь.   -  person alex    schedule 06.12.2011


Ответы (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.

person Alan Haggai Alavi    schedule 06.12.2011

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

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

Недостатком является то, что мой старый репозиторий полностью мертв - я изменил историю. Согласно документам, это верно и для использования «git filter-branch».

person Dewey Sasser    schedule 10.12.2011
comment
Какое-то время искал предлог для использования этого инструмента, но документы очень уникальны - нет примеров. Было бы неплохо иметь пример, чтобы просто удалить проклятый файл с помощью reposurgeon. - person cmc; 23.08.2013

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

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

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

person Tony Wang    schedule 06.12.2011