Как я могу удалить файлы .DS_Store из репозитория Git?
Вопрос
Как я могу удалить эти раздражающие файлы Mac OS X .DS_Store
файлы из репозитория Git?
Решение
Удалите существующие файлы из репозитория:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Добавьте строку
.DS_Store
к файлу .gitignore
, который можно найти на верхнем уровне вашего репозитория (или создать, если его там еще нет).Вы можете легко сделать это с помощью этой команды в верхнем каталоге
echo .DS_Store >> .gitignore
Тогда
git add .gitignore
git commit -m '.DS_Store banished!'
Другие советы
Объединение ответов benzado и webmat, обновление с помощью git rm
, не допускающий сбоя при обнаружении файлов, которых нет в репозитории, и делающий его доступным для вставки в общем виде для любого пользователя:
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
Лучшее решение для решения этой проблемы - глобально игнорировать эти файлы из всех репозиториев git в вашей системе.Это можно сделать, создав глобальный файл gitignore, например:
vi ~/.gitignore_global
Добавление правил для игнорирования таких файлов, как:
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
Теперь добавьте этот файл в вашу глобальную конфигурацию git:
git config --global core.excludesfile ~/.gitignore_global
Редактировать:
Удалены значки, поскольку их, возможно, потребуется сохранить в качестве ресурсов приложения.
В некоторых ситуациях вы также можете захотеть игнорировать некоторые файлы глобально.Для меня .DS_Store - один из них.Вот как это делается:
git config --global core.excludesfile /Users/mat/.gitignore
(Или любой файл по вашему выбору)
Затем отредактируйте файл точно так же, как файл .gitignore в репозитории.Обратите внимание, что я думаю, что вы должны использовать абсолютный путь.
Если вы не можете удалить файлы из-за того, что в них произошли изменения, поэтапно используйте:
git rm --cached -f *.DS_Store
Мне пришлось изменить git-rm на git rm в приведенном выше примере, чтобы заставить его работать:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
Откройте терминал и введите "cd < Путь к проекту >"
Удалить существующие файлы:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Добавьте это
.DS_Store
введите "ctrl + x".
Тип "y"
Введите, чтобы сохранить файл
git add .gitignore
git commit -m '.DS_Store removed.'
Ответ, за который проголосовали больше всего, потрясающий, но, помогая новичкам вроде меня, вот как создать файл .gitignore, отредактировать его, сохранить, удалить файлы, которые вы, возможно, уже добавили в git, затем загрузить файл на Github.
Создайте файл .gitignore
Чтобы создать файл .gitignore, вы можете просто touch
файл, который создает пустой файл с указанным именем.Мы хотим создать файл с именем .gitignore, чтобы мы могли использовать команду:
touch .gitignore
Игнорировать файлы
Теперь вам нужно добавить строку, которая сообщает git игнорировать файлы хранилища DS в ваш файл .gitignore.Для этого вы можете использовать редактор nano.
nano .gitignore
Nano хорош тем, что содержит инструкции о том, как из него выбраться.(Ctrl-O чтобы спасти, Ctrl-X для выхода)
Скопируйте и вставьте некоторые идеи из этого Суть Github в котором перечислены некоторые распространенные файлы, которые следует игнорировать.Наиболее важными из них, чтобы ответить на этот вопрос, были бы:
# OS generated files #
######################
.DS_Store
.DS_Store?
# являются комментариями и помогут вам упорядочить ваш файл по мере его роста.
Это Статья на Github также содержит несколько общих идей и рекомендаций.
Удалите файлы, уже добавленные в git
Наконец, вам действительно нужно удалить эти файлы DS Store из вашего каталога.
Используйте эту замечательную команду из ответа, за который проголосовали больше всего.Это позволит просмотреть все папки в вашем каталоге и удалить эти файлы из git.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Загрузите файл .gitignore на Github
Последний шаг, вам нужно фактически зафиксировать ваш файл .gitignore.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
удалите их с помощью git-rm
, а затем добавьте файл .DS_Store в .gitignore
чтобы они не добавлялись снова.Вы также можете использовать блюхервест чтобы они не создавались все вместе
Используйте эту команду для удаления существующих файлов:
find . -name '*.DS_Store' -type f -delete
Затем добавьте .DS_Store
Для .gitignore
Следующее сработало для меня лучше всего.Обрабатывались несопоставимые файлы и файлы с локальными изменениями.Для справки, это было в системе Mac 10.7 под управлением git 1.7.4.4.
Найти и удалить:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
Я также глобально игнорирую файл .DS_Store во всех репозиториях, установив глобальный core.excludesfile.
Сначала создайте файл (если он еще не существует).:
touch ~/.gitignore
Затем добавьте следующую строку и сохраните:
.DS_Store
Теперь настройте git так, чтобы он уважал файл глобально:
git config --global core.excludesfile ~/.gitignore
На случай, если вы хотите удалить файлы DS_Store из каждой папки и вложенных папок:
В случае уже зафиксированного DS_Store:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Игнорируйте их, используя:
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
Я обнаружил, что следующая строка из сниппллр лучше всего подходит для вытирания всех .DS_Store
, включая тот, который имеет локальные модификации.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
опция, сохраняет ваш локальный .DS_Store
поскольку это все равно будет воспроизведено.
И точно так же, как упоминалось выше, добавьте .DS_Store
в файл .gitignore в корневом каталоге вашего проекта.Тогда он больше не будет попадаться вам на глаза (из репо).
Я немного опоздал на вечеринку, но у меня есть хороший ответ.Чтобы удалить файлы .DS_Store, используйте следующие команды из окна терминала, но будьте очень осторожны, удаляя файлы с помощью команды "найти".Использование определенного имени с параметром -name является одним из более безопасных способов его использования:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
Вы можете не указывать "-удалить", если хотите просто перечислить их до и после.Это убедит вас в том, что они ушли.
Что касается совета ~/.gitignore_global:будь здесь осторожен.Вы хотите поместить этот красивый файл в .gitignore на верхнем уровне каждой рабочей области и зафиксировать его, чтобы любой, кто клонирует ваше репозиторий, получал выгоду от его использования.
Это сработает:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
Он удаляет все файлы, имена которых заканчиваются на .DS_Store
, включая ._.DS_Store
.
По какой-то причине ни одно из вышеперечисленных действий не сработало на моем Mac.
Мое решение основано на запуске терминала:
rm .DS_Store
Затем выполните следующую команду:
git pull origin master
При инициализации вашего репозитория пропустите команду git, которая содержит
-u
и это не должно быть проблемой.
Это сработало для меня, комбинация из двух ответов сверху:
- $ git rm --кэшированный -f *.DS_Store
- $ git commit -m "фильтр-ветвь --индекс-фильтр'git rm --кэшированный --игнорировать-не сопоставлять .DS_Store"
- $ git push origin master -принудительно
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
Есть несколько решений для решения этой проблемы.Чтобы избежать создания файлов .DS_Store, не используйте OS X Finder для просмотра папок.Альтернативным способом просмотра папок является использование командной строки UNIX.Для удаления файлов .DS_Store можно использовать сторонний продукт под названием DS_Store Terminator.Для удаления файлов .DS_Store из всей системы можно использовать команду командной строки UNIX.Запустите терминал из приложений: Утилиты В командной строке UNIX введите следующую команду UNIX:sudo find / -имя ".DS_Store" -глубина -exec rm {} \;При запросе пароля введите пароль администратора Mac OS X.
Эта команда предназначена для поиска и удаления всех вхождений .DS_Store, начиная с корневого каталога (/) файловой системы на всем компьютере.Чтобы настроить выполнение этой команды как запланированной задачи, выполните следующие действия:Запустите терминал из приложений: Утилиты В командной строке UNIX введите следующую команду UNIX:
sudo crontab -e При запросе пароля введите пароль администратора Mac OS X.Оказавшись в редакторе vi, нажмите один раз букву I на клавиатуре и введите следующее:
15 1 * * * поиск корня / -имя ".DS_Store" -глубина -exec rm {} \;
Это называется записью crontab, которая имеет следующий формат:
Пользовательская команда Minute Hour DayOfMonth Month DayOfWeek.
Запись в crontab означает, что команда будет выполняться системой автоматически в 1:15 утра каждый день учетной записью с именем root.
Команда начинается с поиска до конца .Если система не запущена, эта команда не будет выполнена.
Чтобы сохранить запись, нажмите клавишу Esc один раз, затем одновременно нажмите Shift + z+ z.
Примечание:Информация, приведенная на шаге 4, предназначена только для редактора vi.
добавьте это в свой файл .gitignore
#Ignore folder mac
.DS_Store
сохраните это и сделайте фиксацию
git add -A
git commit -m "ignore .DS_Store"
и теперь вы игнорируете это для всех ваших коммитов
Удаление игнорируемых файлов:
(.DS_Store)
$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Нет необходимости удалять .DS_STORE
локально
Просто добавьте его в .gitignore
файл
Файл .gitignore - это просто текстовый файл, который сообщает Git, какие файлы или папки следует игнорировать в проекте.
Команды
nano .gitignore
- Писать
.DS_Store
Затем нажмитеCTRL+X > y > Hit Return
git status
Чтобы в последний раз взглянуть на ваши измененияgit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master