Як я можу видалити такі дратівливі .DS_Storeфайли Mac OS X із сховища Git?
Як я можу видалити такі дратівливі .DS_Storeфайли Mac OS X із сховища 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!'
-execбуде запущено git-rmодин раз для кожного .DS_Store файлу, при цьому xargsбуде розміщено всі шляхи в одному командному рядку. В основному я віддаю перевагу xargsтому, що мені не потрібно турбуватися про те, щоб уникнути багатьох спеціальних персонажів.
.DS_Storeдо .gitignoreроботи рекурсивно? Тобто, це буде ігнорувати some/level/of/folders/.DS_Store?
Поєднуючи відповіді 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
~/.gitignoreоскільки мій глобальний файл виключає біль. Є файли, які я хочу виключити зі свого домашнього каталогу, які я не хочу ігнорувати в усьому світі. Я використовую ~/.gitexcludesнатомість через ту саму директиву:core.excludesfile
Найкраще рішення для вирішення цього питання - глобально ігнорувати ці файли з усіх git repos у вашій системі. Це можна зробити, створивши глобальний файл 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
Відкрийте термінал і введіть "cd <ProjectPath>"
Видаліть наявні файли:
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.'
nano .gitignoreстворює файл, якщо його немає, цю команду слід виконати з кореневої папки проекту
Відповідь вгорі - це приголомшливо, але допомагаючи новобранцям, як я, ось як створити файл .gitignore, відредагувати його, зберегти його, видалити файли, які, можливо, ви вже додали до git, а потім натисніть файл на Github.
Створіть файл .gitignore
Щоб створити .gitignore файл, ви можете просто touchфайл, який створює порожній файл із вказаним іменем. Ми хочемо створити файл під назвою .gitignore, щоб ми могли використовувати команду:
touch .gitignore
Ігноруйте файли
Тепер ви повинні додати рядок, який повідомляє git ігнорувати файли DS Store до вашої .gitignore. Для цього можна скористатися наноредактором.
nano .gitignore
Нано приємно, оскільки містить інструкції, як з нього вийти. ( 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щоб зупинити їх додавання знову. Ви також можете використовувати блакитний урожай, щоб зупинити їх створення всі разом
Якщо ви хочете видалити файли 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
Наступне працювало найкраще для мене. Обробляються незрівнянні файли та файли з локальними модифікаціями. Для довідки, це було в системі 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
Я виявив, що наступний рядок від snipplr найкраще витирає всі .DS_Store, включаючи той, який має локальні модифікації.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cachedваріант, зберігає ваш локальний, .DS_Storeоскільки він все одно буде відтворений.
І так само, як згадувалося все вище, додайте .DS_Storeдо .gitignore файл у корені вашого проекту. Тоді його вже не буде перед вами (репост).
Я трохи запізнююся на вечірку, але в мене є хороша відповідь. Щоб видалити .DS_Store файли, використовуйте наступні команди з вікна терміналу, але будьте дуже обережні, видаляючи файли за допомогою "find". Використання конкретного імені за допомогою параметра -name є одним із безпечніших способів його використання:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
Ви можете залишити "-delete", якщо хочете просто перерахувати їх до і після. Це заспокоїть вас, що вони пішли.
Що стосується ~ / .gitignore_global поради: будьте уважні тут. Ви хочете розмістити цей приємний файл у .gitignore в межах верхнього рівня кожного робочого місця та зробити його так, щоб кожен, хто клонував ваше репо, отримав користь від його використання.
Це спрацює:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
Він видаляє всі файли, імена яких закінчуються .DS_Store, в тому числі ._.DS_Store.
"*.DS_Store", щоб зірочка передалася findоболонці, а не розширювалася.
Чомусь ніхто з перерахованого вище не працював на моєму комп'ютері.
Моє рішення з термінального запуску:
rm .DS_Store
Потім запустіть наступну команду:
git pull origin master
Це працювало для мене, комбо з двох відповідей зверху:
Для вирішення цієї проблеми існує декілька рішень. Щоб уникнути створення .DS_Store файлів, не використовуйте Finder OS X для перегляду папок. Альтернативний спосіб перегляду папок - використання командного рядка UNIX. Для видалення файлів .DS_Store може бути використаний сторонній продукт, який називається DS_Store Terminator. Для видалення .DS_Store файлів з усієї системи можна використовувати команду оболонки UNIX. Запустити термінал із додатків: Утиліти У запиті оболонки UNIX введіть таку команду UNIX: sudo find / -name ".DS_Store" -depth -exec rm {} \; Коли буде запропоновано ввести пароль, введіть пароль адміністратора Mac OS X.
Ця команда полягає у пошуку та видаленні всіх подій .DS_Store, починаючи з кореня (/) файлової системи через всю машину. Щоб налаштувати цю команду для виконання запланованого завдання, виконайте наступні кроки: Запуск терміналу з додатків: Утиліти У запиті оболонки UNIX введіть таку команду UNIX:
sudo crontab -e Коли буде запропоновано ввести пароль, введіть пароль адміністратора Mac OS X. Одного разу в редакторі vi один раз натисніть букву I на клавіатурі та введіть наступне:
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
Це називається запис crontab, який має такий формат:
Хвилинна година 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"
і тепер ви ігноруєте це у всіх своїх зобов'язаннях
Найкращий спосіб позбутися цього файлу назавжди і більше ніколи про нього не турбуватися - це
створити глобальний файл .gitignore:
echo .DS_Store >> ~ / .gitignore_global
І нехай git знає, що ви хочете використовувати цей файл для всіх своїх сховищ:
git config --global core.excludesfile ~ / .gitignore_global І це все! .DS_Store не в дорозі.
Не потрібно видаляти .DS_STOREлокально
Просто додайте його у .gitignoreфайл
Файл .gitignore - це лише текстовий файл, який повідомляє Git, які файли чи папки ігнорувати в проекті.
Команди
nano .gitignore.DS_StoreПотім натиснітьCTRL+X > y > Hit Returngit status Останнє ознайомлення з вашими змінамиgit add .gitignoregit commit -m 'YOUR COMMIT MESSAGE'git push origin master