.gitignore после коммита

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

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

Ответ 1

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

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

git rm --cached /\*.exe

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

Ответ 2

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

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

git rm --cached path/to/ignored.exe

Ответ 3

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

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push

Ответ 4

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

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

а затем нажмите на мастер

Ответ 5

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

Нет.

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

Страница руководства для git -filter-branch содержит исчерпывающие примеры.

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

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

Ответ 6

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