Почему git просматривает каталог продавцов?

У меня есть файл .gitignore с этим кодом:

/app/cache/*
/app/logs/*
/app/bootstrap*
/vendor/*
/web/bundles/
/app/config/parameters.yml

но когда я это сделаю:

$ git status

в любой ситуации (до и после добавления и фиксации), я получаю длинный текстовый вывод следующим образом:

    ...

    #   deleted:    vendor/doctrine/orm/tools/sandbox/cli-config.php
    #   deleted:    vendor/doctrine/orm/tools/sandbox/doctrine
    #   deleted:    vendor/doctrine/orm/tools/sandbox/doctrine.php
    #   deleted:    vendor/doctrine/orm/tools/sandbox/index.php
    #   deleted:    vendor/doctrine/orm/tools/sandbox/xml/Entities.Address.dcm.xml
    #   deleted:    vendor/doctrine/orm/tools/sandbox/xml/Entities.User.dcm.xml
    #   deleted:    vendor/doctrine/orm/tools/sandbox/yaml/Entities.Address.dcm.yml
    #   deleted:    vendor/doctrine/orm/tools/sandbox/yaml/Entities.User.dcm.yml
    #   modified:   vendor/friendsofsymfony/user-bundle/FOS/UserBundle
    #   modified:   vendor/gedmo/doctrine-extensions
    #   modified:   vendor/herzult/forum-bundle/Herzult/Bundle/ForumBundle
    #   modified:   vendor/kriswallsmith/assetic
    #   modified:   vendor/symfony/property-access/Symfony/Component/PropertyAccess/.gitignore
    #   modified:   vendor/symfony/property-access/Symfony/Component/PropertyAccess/StringUtil.php
    #   modified:   vendor/symfony/symfony/CHANGELOG-2.1.md

    ...

Каталог поставщиков находится в файле .gitignore, поэтому я не знаю, что происходит. Я пробовал с:

$ sudo git clean -dxf

но ничего не меняется.

Ответы

Ответ 1

В каталог репозитория зарегистрирован каталог поставщика. Чтобы удалить его, перейдите в свой git корень репо и запустите:

git rm -r --cached vendor

Это будет рекурсивно (из-за флага -r) удалить поставщика из вашего репозитория git. Флаг --cached будет поддерживать локальную копию каталога поставщика тактично. Обратите внимание, что если есть другие разработчики, работающие с репо, их копия каталога vendor будет удалена, и они снова должны будут bundle install.

Как только вы отследите каталог в git, вы можете зафиксировать это изменение, используя:

git commit -m "untrack vendor directory"

После этого .gitignore с радостью будет игнорировать любые изменения в каталоге поставщика в следующий раз.

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

Ответ 2

Похоже, что у вас уже есть файлы под маркой vendor/*. .gitignore игнорирует только не проверенные файлы. См. Также первый абзац в man gitignore.