Я додав .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
із сховища.
Відчувається порада: оскільки ви, мабуть, ніколи не хочете включати .DS_Store файли, складіть глобальне правило. Спочатку зробіть десь глобальний файл .gitignore, напр echo .DS_Store >> ~/.gitignore_global
. Тепер скажіть мерзотнику , щоб використовувати його для всіх сховищ: 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
git rm --cached your_file
перший
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
, від: stackoverflow.com/questions/18393498 / ...
-f
потрібне, якщо у вас є відкриті файли у папках відновлення:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Якщо .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 ...)
*
чи **
залежно від того, чого ви хочете досягти. Це спосіб розповісти оболонці, як орієнтуватися в каталогах. Це StackOverflow відповідь пояснює це повністю stackoverflow.com/a/28199633/4092170
Ваш файл .gitignore має виглядати так:
# Ignore Mac DS_Store files
.DS_Store
Поки ви не включаєте косу рису, вона узгоджується з ім'ям файлу у всіх каталогах. ( звідси )
git rm --cached path/to/file/here
Крок 1, видаліть усі *.DS_store
файли. Можна бігати
git rm -f *.DS_Store
але пам’ятайте, що це rm -f
може бути трохи небезпечно, якщо у вас є друкарська помилка! Крок другий: додайте
*.DS_Store
.DS_Store
to .gitignore. Це працювало для мене!
Ви також можете додати --cached
прапор до відповіді ауко для підтримки локальних файлів .DS_store, про що Едвард Ньюелл згадував у своїй оригінальній відповіді. Змінена команда виглядає приблизно так: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch
..голосити спасибі!
$ git rm ./*.DS_Store
- видаліть усі .DS_Store з git$ echo \.DS_Store >> .gitignore
- ігноруйте .DS_Store в майбутньомувчинити та натиснути