Я добавил .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
из репозитория.
Контекст Felt: поскольку вы, вероятно, никогда не хотите включать файлы .DS_Store, создайте глобальное правило. Сначала создайте глобальный файл .gitignore где-нибудь, например. echo .DS_Store >> ~/.gitignore_global
. Теперь скажите git использовать его для всех репозиториев: git config --global core.excludesfile ~/.gitignore_global
.
Эта страница помогла мне ответить на ваш вопрос: https://help.github.com/articles/ignoring-files
Добавить **/.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
Ваш .gitignore файл должен выглядеть следующим образом:
# Ignore Mac DS_Store files
.DS_Store
Пока вы не включаете косую черту, оно сопоставляется с именем файла во всех каталогах. (от здесь)
Если .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 файл, а затем снова зафиксируйте и нажмите с двумя последними фрагментами кода (git commit..., git push...)
Шаг 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 и спасибо!
Добавьте *.DS_Store
в ваш .gitignore файл. Это отлично работает для меня.
Шаг: 1) Удалите существующие файлы с помощью этой команды
найти. -name.DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Шаг: 2) Добавьте файл .DS_Store в свой .gitignore файл
Шаг: 3) Зафиксируйте изменения в .gitignore git добавить .gitignore git commit -m "удален .DS_Store"