.gitignore после коммита - PullRequest
183 голосов
/ 30 июня 2011

У меня есть Git-репозиторий, размещенный на Github.После фиксации многих файлов я понимаю, что мне нужно создать .gitignore и исключить .exe, .obj файлы.

Однако будет ли он автоматически удалять эти зафиксированные файлы из хранилища?Есть ли способ заставить это?

Ответы [ 6 ]

298 голосов
/ 30 июня 2011

Нет, вы не можете принудительно удалить файл, уже зафиксированный в репо, только потому, что он добавлен в .gitignore

. Вам нужно git rm --cached, чтобы удалить файлы, которые вы не сделали.хочу в репо.(- кэшировано, поскольку вы, вероятно, хотите сохранить локальную копию, но удалить из репозитория.) Поэтому, если вы хотите удалить все исполняемые файлы из репо, сделайте

git rm --cached /\*.exe

(обратите внимание, что звездочка * заключена в кавычкииз оболочки - это позволяет git, а не оболочке, расширять пути к файлам и подкаталогам)

32 голосов
/ 30 июня 2011

Однако будет ли он автоматически удалять эти зафиксированные файлы из хранилища?

Нет. Даже с существующим .gitignore вы можете ставить «игнорируемые» файлы с флагом -f (force). Если их файлы уже зафиксированы, они не удаляются автоматически.

git rm --cached path/to/ignored.exe
14 голосов
/ 10 мая 2017

Если вы еще не нажали изменения:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push
11 голосов
/ 04 августа 2015

Мне пришлось удалить папки .idea и target, и после прочтения всех комментариев это сработало:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

и затем нажмите, чтобы освоить

5 голосов
/ 30 июня 2011

Однако будет ли он автоматически удалять эти зафиксированные файлы из хранилища?

Нет.

«Лучший» рецепт для этого - использовать git filter-branch, как написано здесь:

Страница man для git-filter-branch содержит подробные примеры.

Примечание Вы будете переписывать историю. Если вы опубликовали какие-либо ревизии, содержащие случайно добавленные файлы, это может создать проблемы пользователям этих общедоступных веток. Сообщите им или, возможно, подумайте, насколько сильно вам нужно удалить файлы.

Примечание При наличии тегов всегда используйте параметр --tag-name-filter cat для git filter-branch. Это никогда не причиняет боль и избавит вас от головной боли, когда вы поймете, что позже вам это нужно

1 голос
/ 31 июля 2015

Даже после того, как вы удалите файл (ы), а затем подтвердите, эти файлы останутся в истории. Чтобы удалить их, рассмотрите возможность использования BFG Repo-Cleaner . Это альтернатива git-filter-branch.

...