Я добавил .DS_Store в файл .gitignore, но кажется, что он игнорирует только .DS_Store в корневом каталоге, а не в каждой папке и подпапке.
Как я могу это исправить?
Я добавил .DS_Store в файл .gitignore, но кажется, что он игнорирует только .DS_Store в корневом каталоге, а не в каждой папке и подпапке.
Как я могу это исправить?
Ответы:
Думаю, проблема в том, что в какой-то более ранний коммит вы случайно добавили .DS_Store
файлы в репозиторий. Конечно, как только файл отслеживается в вашем хранилище, он будет продолжать отслеживаться, даже если он соответствует записи в соответствующем файле .gitignore.
Вы должны вручную удалить .DS_Store
файлы, которые были добавлены в ваш репозиторий. Ты можешь использовать
git rm --cached .DS_Store
После удаления git должен игнорировать это. Вы должны только следующая строка в корневом .gitignore
файле: .DS_Store
. Не забывайте период!
git rm --cached .DS_Store
удаляет только .DS_Store
из текущего каталога. Ты можешь использовать
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
удалить все .DS_Stores
из хранилища.
Совет: поскольку вы, вероятно, никогда не захотите включать .DS_Store
файлы, создайте глобальное правило. Сначала создайте глобальный .gitignore
файл где-нибудь, например
echo .DS_Store >> ~/.gitignore_global
Теперь скажите git использовать его для всех репозиториев:
git config --global core.excludesfile ~/.gitignore_global
Эта страница помогла мне ответить на ваш вопрос.
Добавить **/.DS_Store
в .gitignore
подкаталог
Если .DS_Store
уже совершено:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Чтобы игнорировать их во всех хранилищах: (иногда его называют ._.DS_Store
)
echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
git rm --cached your_file
первым
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
от: stackoverflow.com/questions/18393498/…
-f
необходимо, если у вас есть открытые файлы в соответствующих папках:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Если .DS_Store никогда не добавлялся в ваш репозиторий git, просто добавьте его в свой файл .gitignore.
Если у вас его нет, создайте файл с именем
.gitignore
В корневом каталоге вашего приложения и просто напишите
**/.DS_Store
В этом. Это никогда не позволит файлу .DS_Store проникнуть в ваш git.
Но, если он уже есть, напишите в своем терминале:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
затем зафиксируйте и нажмите изменения, чтобы удалить .DS_Store из вашего удаленного хранилища:
git commit -m "Remove .DS_Store from everywhere"
git push origin master
А теперь добавьте .DS_Store в ваш файл .gitignore, а затем снова подтвердите и отправьте 2 последних фрагмента кода (git commit ..., git push ...)
*
или **
зависит от того, чего вы хотите достичь. Это способ указать оболочке, как перемещаться по каталогам. Этот ответ stackoverflow объясняет это полностью stackoverflow.com/a/28199633/4092170
Ваш файл .gitignore должен выглядеть так:
# Ignore Mac DS_Store files
.DS_Store
Пока вы не включите косую черту, она сопоставляется с именем файла во всех каталогах. ( отсюда )
git rm --cached path/to/file/here
Шаг 1, удалите все *.DS_store
файлы. Можно бежать
git rm -f *.DS_Store
но знайте, что это rm -f
может быть немного опасно, если у вас есть опечатка! Шаг второй: добавить
*.DS_Store
.DS_Store
к .gitignore. Это сработало для меня!
Вы также можете добавить --cached
флаг к ответу auco, чтобы сохранить локальные файлы .DS_store, как упомянул Эдвард Ньюэлл в своем первоначальном ответе. Модифицированная команда выглядит следующим образом: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch
..cheers и спасибо!
$ git rm ./*.DS_Store
удалить все .DS_Store из Git$ echo \.DS_Store >> .gitignore
- игнорировать .DS_Store в будущемсовершить и подтолкнуть