.gitignore всі .DS_Store файли у кожній папці та підпапках


560

Я додав .DS_Store у файл .gitignore, але, здається, він ігнорує лише .DS_Store в кореневому каталозі, а не в кожній папці та підпапках.

Як це виправити?



Як саме ви додали його до .gitignore? Він повинен працювати у всіх каталогах (робить це для мене).
Тило

Це працює і для мене. Я також спробував, коли його в кінці файлу, якщо у вас є (для платформи) новий рядок, але це не змінило, що .DS_Store каталоги в будь-якій частині ієрархії все ще ігнорувались.
enorl76

Як я розумію, питання: як легко ігнорувати всі виникнення .DS_Store у всіх підкаталогах, не роблячи це вручну у кожному підкаталозі. У мене була така ж проблема. Нижче наведена відповідь показує, як її вирішити (останні 2 абзаци).
петрсин

Відповіді:


646

Я думаю, що проблема у вас полягає в тому, що в деяких попередніх фіксаціях ви випадково додали .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із сховища.

Відчувається порада: оскільки ви, мабуть, ніколи не хочете включати .DS_Store файли, складіть глобальне правило. Спочатку зробіть десь глобальний файл .gitignore, напр echo .DS_Store >> ~/.gitignore_global. Тепер скажіть мерзотнику , щоб використовувати його для всіх сховищ: git config --global core.excludesfile ~/.gitignore_global.

Ця сторінка допомогла мені відповісти на ваше запитання: https://help.github.com/articles/ignoring-files


41
Останні 2 абзаци відповідають на це питання. Дякую.
петрсин

70
´´git rm - cached .DS_Store´´ видаляє лише один .DS_Store з поточного каталогу. Використовуйте „знайдіть”. -ім'я .DS_Store -print0 | xargs -0 мерзотник гт --ignore-unmatch '' , щоб видалити всі .DS_Stores з репо
Auco

4
Список інших поширених файлів, які слід ігнорувати, може бути корисним
geotheory

14
Погана ідея використовувати глобальне правило IMO: Намагання підтримувати глобальні конфігурації для декількох користувачів / машин ніколи не спрацьовує - ви хочете, щоб правила, які керують вашою репо, були в самій репо. Погодьтеся з цим
Ярін

15
Я не згоден з вами. (Незважаючи на те, що я підтримав ваш коментар, оскільки я вважаю, що це проникливий.) Якщо ми робимо глобальний, то кожному користувачеві Mac потрібно робити це, але лише один раз. Якщо ми робимо сховище широко, то нам потрібно зробити це для кожного сховища. Я не знаю про вас, але я постійно роблю нові репости. Роблячи це в усьому світі, людина вирішує проблему раз і назавжди.
Едвард Ньюелл

355

Додати **/.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

все ще завантажено в репо?
Фредді Сидаурук

@FreddySidauruk використовуйте git rm --cached your_fileперший
ronald8192

@FreddySidauruk Мабуть find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch, від: stackoverflow.com/questions/18393498 / ...
ronald8192

1
Здається, додавання -fпотрібне, якщо у вас є відкриті файли у папках відновлення:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Мехмет Каплан,

158

Якщо .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 ...)


3
Чому подвійна зірочка? Що це означає?
МіланГ

1
@MilanG - це ключове слово, яке в основному означає «пошук у цьому каталозі та всіх підкаталогах».
lachie_h

1
Не впевнений, що це ідеальне пояснення того, що означає подвійна зірочка. Це марна карта. Можна *чи **залежно від того, чого ви хочете досягти. Це спосіб розповісти оболонці, як орієнтуватися в каталогах. Це StackOverflow відповідь пояснює це повністю stackoverflow.com/a/28199633/4092170
El'Magnifico

** ніколи не збігаються з прихованими (./) каталогами: facelessuser.github.io/wcmatch/glob
Джонатан

це насправді працює ... слід
ichimaru

85

Ваш файл .gitignore має виглядати так:

# Ignore Mac DS_Store files
.DS_Store

Поки ви не включаєте косу рису, вона узгоджується з ім'ям файлу у всіх каталогах. ( звідси )


це все ще переобладнане в репо
Фредді Сідаурук

@FreddySidauruk, то вам доведеться бігтиgit rm --cached path/to/file/here
Sgnl

23

Крок 1, видаліть усі *.DS_storeфайли. Можна бігати

git rm -f *.DS_Store

але пам’ятайте, що це rm -fможе бути трохи небезпечно, якщо у вас є друкарська помилка! Крок другий: додайте

*.DS_Store
.DS_Store

to .gitignore. Це працювало для мене!


13

Додайте *.DS_Storeдо свого файлу .gitignore. Це прекрасно працює для мене


11

Ви також можете додати --cachedпрапор до відповіді ауко для підтримки локальних файлів .DS_store, про що Едвард Ньюелл згадував у своїй оригінальній відповіді. Змінена команда виглядає приблизно так: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..голосити спасибі!


5

Крок: 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"


3
  1. $ git rm ./*.DS_Store - видаліть усі .DS_Store з git
  2. $ echo \.DS_Store >> .gitignore - ігноруйте .DS_Store в майбутньому

вчинити та натиснути

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.