Использование composer в качестве хранилища моего последнего кода, но .git предотвращает фиксацию кода - PullRequest
0 голосов
/ 21 июня 2019

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

Композитор казался идеальным инструментом для этого, но я обнаружил, что мне приходится бороться с этим инструментом, чтобы достичьчто я хочу.

Чего я хочу добиться:

  1. , чтобы моя библиотека была независимой от каждого приложения.
  2. вставьте мою библиотеку в приложение, имея возможность выбрать версию по желанию
  3. использовать Git Flow (Develop / Feature / Hotfix / Master) для отслеживания версий приложения
  4. подтолкнуть основную ветвь приложения к производству (используя ловушку для проверки мастера)

Последний пункт важен: все, что зафиксировано в мастере, является ОФИЦИАЛЬНЫМ КОДОМ ПРОИЗВОДСТВА.Когда я отправляю его на рабочий сервер, производственный код - это ТОЧНО то, что передается в master.

Очевидно, что Composer не разделяет эту мысль, потому что они настаивают на том, что вы НЕ должны фиксировать что-либо в / vendor.Это означает, что вам, очевидно, придется запускать composer на вашем производственном сервере. Это не вариант для меня сейчас из-за ограничений компании .

Поэтому проблема, с которой я сталкиваюсь, заключается в том, что композитор автоматически клонирует папку .git смоя библиотека.Это не позволяет git моего приложения видеть эту папку.

Документация Composer гласит:

Если вы действительно чувствуете, что должны это сделать, у вас есть несколько вариантов:

  1. Ограничьте себя установкой отмеченных выпусков(без версий dev), так что вы можете получить только zip-инсталляции и избежать проблем с git "submodules".
  2. Используйте --prefer-dist или установите предпочитаемый-install для dist в вашей конфигурации.
  3. Удалите каталог .git всех зависимостей после установки, затем вы можете добавить их в ваш репозиторий git.Вы можете сделать это с помощью rm -rf vendor/**/.git в ZSH или find vendor/ -type d -name ".git" -exec rm -rf {} \; в Bash.но это означает, что вам придется удалить эти зависимости с диска перед запуском обновления композитора.
  4. Добавьте правило .gitignore (/vendor/**/.git), чтобы игнорировать все папки .git производителя.Этот подход не требует удаления зависимостей с диска перед запуском обновления композитора.

Пока что единственное, что сработало для меня, это вариант 3, удалить вручную .git папка.Это хорошо, за исключением того, что я волнуюсь, что когда-нибудь в 2:00, когда я немного сонный, что произойдет, если я удалю неправильный .git ... Yikes!


Что я пробовал:

.gitignore, совершено (последние две записи просто в отчаянии)

/vendor/**/.git
/vendor/**/.git/**
vendor/**/.git

composer.json

{
    "name": "crud-package/project-name",
    "description": "Loading just CRUD package",
    "require": {
      "crud/core":"^1.3.1"
    },
    "repositories": [
      {
        "type":"vcs",
        "url":"//path/to/composer_projects/crud"
      }

    ],

    "autoload": {
        "classmap": [
          "vendor/crud/core"
        ]
    },
    "config": {
        "preferred-install": "dist"
    }

}

Затем установка с помощью

$ cmd //c composer update --prefer-dist
Loading composer repositorUpdating dependencies (including require-dev)         Package operations: 1 install, 0 updates, 0 removals
  - Installing crud/core (v1.3.2): Cloning b734c2dfb6 from cache
Writing lock file
Generating autoload files

Я что-то упускаю из виду, почему единственное, что работает, это # ​​3?Есть ли что-нибудь еще, что я могу попробовать?Как я могу игнорировать папку .git, если я не могу заставить композитора воздержаться от ее размещения там?

Решение, на которое я надеюсь, состоит в том, чтобы git игнорировал папку .git и все вещи автозагрузки композиторачто мне действительно не нужно.

...