.gitignore не работает для файла в подкаталоге

Это содержимое моего файла.gitignore, который находится в корне моего репозитория:

# grails stuff to ignore
target
*.iml
*.ipr
.idea
*.log
*.swp   # vi swap files
.DS_Store  # OS X Finder cache files

# cocoapods stuff to ignore
Pods
Podfile.lock

.DS_Store Файл в корневом каталоге моего проекта правильно игнорируется, но состояние git дает:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    ios/.DS_Store

nothing added to commit but untracked files present (use "git add" to track)

Так почему же ios/.DS_Store не игнорируется?

Работая на OS X 10.9.2, используя версию git, которую поставляет Apple: "git version 1.8.5.2 (Apple Git-48)"

1 ответ

Решение

Ну, я думаю, что это происходит из-за дополнительного пробела в правиле игнорирования, из-за комментария, который вы добавили сразу после этого, и из-за них шаблон не соответствует. Проверено на git version 1.8.3.2, Ubuntu 13.10

Следующая запись в .gitignore работает нормально (без лишних пробелов)

.DS_Store

Пока ни одна из этих работ (есть место после правила)

*.DS_Store # OS X Finder cache files
.DS_Store # OS X Finder cache files

Я думаю, ваш PROJECT_DIR/.DS_Store уже зарегистрирован в репо, следовательно, не отображается в git statusВы уверены, что ваш PROJECT_DIR/.DS_Store уже не является частью репо?

Сделать git log .DS_Store и посмотреть, если какие-то коммиты будут выброшены.

Если да, используйте первое правило игнорирования, которое работает, и удалите существующее .DS_Store лайк

git rm --cached .DS_Store
git commit -m "msg"

РЕДАКТИРОВАТЬ

Вы вводите комментарии в неправильном формате, они должны быть помещены в начало файла / игнорировать правила. Проверьте это.

Я проверил ваше другое правило игнорирования с комментарием - *.swpи это тоже не работает.

Со страницы git-scm на gitignore

Каждая строка в файле gitignore указывает шаблон. При принятии решения о том, следует ли игнорировать путь, Git обычно проверяет шаблоны gitignore из нескольких источников со следующим порядком приоритета, от наивысшего к низшему (в пределах одного уровня приоритета последний соответствующий шаблон определяет результат)

Когда мы считаем, что.gitignore НЕ работает, одна из причин может заключаться в том, что эти файлы действительно зафиксированы. Так что.gitignore не может его игнорировать!

по этой ссылке https://www.atlassian.com/git/tutorials/saving-changes/gitignore "git check-ignore -v pesty.file.name" может помочь отладить.gitignore. Это очень полезный способ отладки. Вероятно, есть и другие случаи, когда.gitignore НЕ работает. Если каждый сможет поделиться своим неудачным случаем, то как заставить его работать, база знаний может продолжать расти. этот "check-ignore -v" - наш друг.

Другие вопросы по тегам