Как я могу удалить файл из git, используя filter-branch, чтобы я не мог все еще использовать git grep? - PullRequest
2 голосов
/ 31 августа 2010

Я очень старался удалить файл с конфиденциальными данными из моего репозитория git, используя эту отличную страницу (среди прочих): http://help.github.com/removing-sensitive-data/

основная строка:

git filter-branch --index-filter 'git rm --cached \
    --ignore-unmatch FileWithSecrets.java' HEAD

Однако даже когда я следую инструкциям, включая удаление объектов и сборку мусора, тот факт, что я переписал историю, похоже, не удаляет файл полностью.

Суть в том, что я все еще могу найти содержимое файла, используя git grep: git grep $ (git rev-list --all)

.... и он все еще появляется.

Я упускаю что-то очевидное или неочевидное? Почему я все еще могу "git grep" содержимое?

Я вижу, что файла больше нет в наборе изменений, когда я делаю "git show" коммита, в который он был добавлен. Но даже в этом случае я все еще могу сделать это, как будто он был удален из истории веток, но все еще там?

Git это весело, круто и удивительно, но на самом деле может поколебать уверенность в себе:)

спасибо !! Брендан

1 Ответ

3 голосов
/ 31 августа 2010

Я не пробовал это, но поскольку последний аргумент для git filter-branch определен как [--] [<rev-list options>...], и вы получаете конфиденциальную информацию из оборотов в git rev-list --all, это должно работать:

git filter-branch --index-filter 'git rm --cached \
--ignore-unmatch FileWithSecrets.java' -- --all
                                       ^^^^^^^^
...