Игнорирование файлов при подключении библиотеки composer

Сделал библиотеку, залил её в gitlab

Хочу чтобы при установке библиотеки composer require "myname/mylib":"dev-master" исключался каталог /tests, .git/ и ещё пару файлов

Возможно я путаю, и composer такое не воспринимает, но я в файле .gitattributes добавил следующий код

/tests export-ignore
/some-file.ext export-ignore

Всё равно при подключении библиотеки эти файлы появляются, находил статью нужно composer install --prefer-dist выполнять, но тоже не помогла такая попытка установки библиотеки

Как побороть подскажите? Желательно подружить composer и .gitatributes

Я посмотрел популярные библиотеки, у них только .gitattributes прописан с исключениями


Ответы (1 шт):

Автор решения: Jigius

Опция export-ignore файла .gitattributes используется при создании архива командой git archive. Попробуйте создать архив из своей библиотеки, размещенной на приватной VCS командой: git archive --remote [email protected]:/path/to/repo.git -o /tmp/mylib.zip master и распакуйте его - вы увидете, что файлы/папки, указанные Вами в файле .gitattributes - отсутствуют. Папку с индексом .git указывать в .gitattributes не нужно - в архив она не включается.

У вас библиотека находится на приватном VCS, который подключен в файле composer.json через настройки раздела "repositories": []. В таком случае при установке пакета, вне зависимости от установленных параметров --prefer-source или --prefer-dist для composer require, он будет устанавлен с помощью клонирования указанной ветки и поэтому опции export-ignore файла .gitattributes не будут использованы.

=

Вы можете "побороть" это, разместив вашу библиотеку из приватного проекта в репозитории с типом composer на платном ресурсе или создать собственный, на своем ресурсе.

Я опишу вариант с размещением репозитория на http-сервере (можно также, в подходящих случаях, разместить репозиторий локально, на хосте разработки).

Чтобы создать собственный composer-репозиторий нужно:

  • разместить два файл на http-сервере: packages.json и файл с zip-архивом библиотеки(созданный командой git archive)

  • в файл composer.json(папка проекта) добавить собственный репозиторий с типом composer

Пример содержимого файла packages.json:

{
  "packages": {
    "myname/mylib": {
      "dev-master": {
        "name": "myname/mylib",
        "version": "dev-master",
        "dist": {
          "url": "https://example.com/downloads/myname/dev-master/mylib.zip",
          "type": "zip"
        },
        "source": {
          "type": "git",
          "url": "[email protected]:/path/to/mylib.git",
          "reference": "master"
        }
      }
    }
  }
}

Архив пакета создается командой:

git archive --remote [email protected]:/path/to/mylib.git -o ./mylib.zip master

Созданный composer-репозиторий добавляется в проект командой:

composer config repositories.example '{"type": "composer", "url": "https://example.com/path/to/folder"}'

где /path/to/folder - это путь до папки, в которой размещен файл packages.json

Теперь вы сможете устанавливать пакет из дистрибутива(опция --prefer-dist - по-умолчанию) - подготовленного архива (файл mylib.zip) или, для активной разработки, клонированием его из VCS-репозитория (опция --prefer-source)

→ Ссылка