2009-12-07 3 views
7

2 недели назад, я скопировал конфигурацию моего приложения, у которого был мой пароль, это не очень полезно. Как удалить файл из истории фиксации и убедиться, что он не перезапускается?Git - удалить и исключить конфигурационный файл

Я хочу удалить файл из всего дерева коммитов, потому что он содержит мои пароли.

+0

Что именно вы пытаетесь сделать? Вы хотите вернуться к одной фиксации, которая произошла 2 недели назад? – BastiBen

ответ

18

Вы можете

git rm myConfigFile 
echo myConfigFile > .gitignore 
git add .gitignore 
git commit -m "from now on, no more myConfigFile" 

Другой крайний подход (опасный, особенно если вы уже толкнули ваш репозиторий к удалённому) будете полностью удалить этот файл из истории указанного репо :

git filter-branch --index-filter 'git update-index --remove myConfigFile' HEAD 

(использовать с осторожностью, так и с резервным первым)

В вопросе How do I remove sensitive files from git’s history есть более чувствительная тема.

Проблемы, связанные с этим процессом в два раза:

  1. Если репо уже клонировать, вы никогда не может гарантировать, конфиденциальная информация будет действительно «ушел» от любого другого репо.
  2. Когда другие попытаются снести ваши последние изменения после этого, они получат сообщение о том, что изменения не могут быть применены, потому что это не ускоренная перемотка вперед.
    Чтобы исправить это, им придется либо удалить существующий репозиторий, либо повторно клонировать его, либо выполнить инструкции в разделе «RECOVERING FROM UPSTREAM REBASE» в git-rebase manpage.
    В обоих случаях, ваша конфиденциальная информация не будет «спокойно» заменены или удалены ...
+0

. Золото, спасибо! , – IvRRimUm

1
cp my-config config.tmp 
git rm my-config 
git commit -m 'removed config' 
mv config.tmp my-config 
echo my-config >> .gitignore 
git add .gitignore 
git commit -m 'ignore config' 
Смежные вопросы