Как я могу удалить файлы .DS_Store из репозитория Git?

StackOverflow https://stackoverflow.com/questions/107701

  •  01-07-2019
  •  | 
  •  

Вопрос

Как я могу удалить эти раздражающие файлы 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 < Путь к проекту >"

  1. Удалить существующие файлы:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. Добавьте это .DS_Store

  4. введите "ctrl + x".

  5. Тип "y"

  6. Введите, чтобы сохранить файл

  7. git add .gitignore

  8. 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top