Как именно вы добавили его в .gitignore? Это должно работать во всех каталогах (делает для меня).
Тило
Это работает и для меня. Я также попытался, когда он был в конце файла, если вам нужно было (новую строку для конкретной платформы), но это не изменило, что каталоги .DS_Store в какой-либо части иерархии все еще игнорировались.
enorl76
Насколько я понимаю, вопрос заключался в следующем: как легко игнорировать все вхождения .DS_Store во всех подкаталогах, не делая этого вручную в каждом подкаталоге. У меня такая же проблема. Ниже ответ показывает, как ее решить (последние 2 абзаца).
Петрсын
Ответы:
648
Думаю, проблема в том, что в какой-то более ранний коммит вы случайно добавили .DS_Storeфайлы в репозиторий. Конечно, как только файл отслеживается в вашем хранилище, он будет продолжать отслеживаться, даже если он соответствует записи в соответствующем файле .gitignore.
Вы должны вручную удалить .DS_Storeфайлы, которые были добавлены в ваш репозиторий. Ты можешь использовать
git rm --cached .DS_Store
После удаления git должен игнорировать это. Вы должны только следующая строка в корневом .gitignoreфайле: .DS_Store. Не забывайте период!
git rm --cached .DS_Store
удаляет только .DS_Storeиз текущего каталога. Ты можешь использовать
Совет: поскольку вы, вероятно, никогда не захотите включать .DS_Storeфайлы, создайте глобальное правило. Сначала создайте глобальный .gitignoreфайл где-нибудь, например
echo .DS_Store >> ~/.gitignore_global
Теперь скажите git использовать его для всех репозиториев:
Последние 2 абзаца отвечают на этот вопрос. Спасибо.
Петрсын
70
´´git rm --cached .DS_Store´´ удаляет только один .DS_Store из текущего каталога. Используйте «поиск». имя .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´, чтобы удалить все .DS_Stores из
репозитория
4
Список других распространенных файлов, которые можно игнорировать, может быть
полезен
14
Плохая идея использовать глобальное правило IMO: Попытка поддерживать глобальные конфигурации для нескольких пользователей / машин никогда не работает - вам нужны правила, управляющие вашим репо в самом репо. Согласитесь с этим
Ярин
15
Я не согласен с тобой. (Несмотря на то, что я одобрил ваш комментарий, так как считаю его проницательным.) Если мы делаем глобальные изменения, то каждый пользователь Mac должен сделать это, но только один раз. Если мы делаем широкий репозиторий, то нам нужно делать это для каждого репозитория. Я не знаю о вас, но я делаю новые репо все время. Делая это глобально, человек решает проблему раз и навсегда.
Кажется, что добавление -fнеобходимо, если у вас есть открытые файлы в соответствующих папках:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Мехмет Каплан
158
Если .DS_Store никогда не добавлялся в ваш репозиторий git, просто добавьте его в свой файл .gitignore.
Если у вас его нет, создайте файл с именем
.gitignore
В корневом каталоге вашего приложения и просто напишите
**/.DS_Store
В этом. Это никогда не позволит файлу .DS_Store проникнуть в ваш git.
@MilanG - это ключевое слово, которое в основном означает «поиск в этом каталоге и во всех его подкаталогах».
lachie_h
1
Не уверен, что это идеальное объяснение того, что означает двойная звездочка. Это подстановочный знак. Может *или **зависит от того, чего вы хотите достичь. Это способ указать оболочке, как перемещаться по каталогам. Этот ответ stackoverflow объясняет это полностью stackoverflow.com/a/28199633/4092170
El'Magnifico
** никогда не
Джонатан
это на самом деле работает ... должен быть помечен как ответ
ichimaru
85
Ваш файл .gitignore должен выглядеть так:
# Ignore Mac DS_Store files
.DS_Store
Пока вы не включите косую черту, она сопоставляется с именем файла во всех каталогах. ( отсюда )
Вы также можете добавить --cachedфлаг к ответу auco, чтобы сохранить локальные файлы .DS_store, как упомянул Эдвард Ньюэлл в своем первоначальном ответе. Модифицированная команда выглядит следующим образом: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers и спасибо!
Ответы:
Думаю, проблема в том, что в какой-то более ранний коммит вы случайно добавили
.DS_Store
файлы в репозиторий. Конечно, как только файл отслеживается в вашем хранилище, он будет продолжать отслеживаться, даже если он соответствует записи в соответствующем файле .gitignore.Вы должны вручную удалить
.DS_Store
файлы, которые были добавлены в ваш репозиторий. Ты можешь использоватьПосле удаления git должен игнорировать это. Вы должны только следующая строка в корневом
.gitignore
файле:.DS_Store
. Не забывайте период!удаляет только
.DS_Store
из текущего каталога. Ты можешь использоватьудалить все
.DS_Stores
из хранилища.Совет: поскольку вы, вероятно, никогда не захотите включать
.DS_Store
файлы, создайте глобальное правило. Сначала создайте глобальный.gitignore
файл где-нибудь, напримерТеперь скажите git использовать его для всех репозиториев:
Эта страница помогла мне ответить на ваш вопрос.
источник
Добавить
**/.DS_Store
в.gitignore
подкаталогЕсли
.DS_Store
уже совершено:Чтобы игнорировать их во всех хранилищах: (иногда его называют
._.DS_Store
)источник
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.
Если у вас его нет, создайте файл с именем
В корневом каталоге вашего приложения и просто напишите
В этом. Это никогда не позволит файлу .DS_Store проникнуть в ваш git.
Но, если он уже есть, напишите в своем терминале:
затем зафиксируйте и нажмите изменения, чтобы удалить .DS_Store из вашего удаленного хранилища:
А теперь добавьте .DS_Store в ваш файл .gitignore, а затем снова подтвердите и отправьте 2 последних фрагмента кода (git commit ..., git push ...)
источник
*
или**
зависит от того, чего вы хотите достичь. Это способ указать оболочке, как перемещаться по каталогам. Этот ответ stackoverflow объясняет это полностью stackoverflow.com/a/28199633/4092170Ваш файл .gitignore должен выглядеть так:
Пока вы не включите косую черту, она сопоставляется с именем файла во всех каталогах. ( отсюда )
источник
git rm --cached path/to/file/here
Шаг 1, удалите все
*.DS_store
файлы. Можно бежатьно знайте, что это
rm -f
может быть немного опасно, если у вас есть опечатка! Шаг второй: добавитьк .gitignore. Это сработало для меня!
источник
Добавьте
*.DS_Store
в свой файл .gitignore. Это работает для меня отличноисточник
Вы также можете добавить
--cached
флаг к ответу auco, чтобы сохранить локальные файлы .DS_store, как упомянул Эдвард Ньюэлл в своем первоначальном ответе. Модифицированная команда выглядит следующим образом:find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch
..cheers и спасибо!источник
Шаг: 1) Удалите существующие файлы с помощью этой команды
найти . имя .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Шаг: 2) Добавьте .DS_Store в ваш файл .gitignore
Шаг: 3) Зафиксируйте изменения в .gitignore git add .gitignore git commit -m "Удалено .DS_Store"
источник
$ git rm ./*.DS_Store
удалить все .DS_Store из Git$ echo \.DS_Store >> .gitignore
- игнорировать .DS_Store в будущемсовершить и подтолкнуть
источник