.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" - наш друг.