.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.