Начальная загрузка проектов с помощью: частных репозиториев git, Composer и Satis

РЕДАКТИРОВАТЬ: То, чего я пытался добиться здесь, может быть выполнено проектом Yeoman.


Итак, я настроил git+composer+satis на частном сервере, все работает нормально, я в восторге от этого. Надо любить их всех.

Я использую git для проектов и для частных пакетов, так что теперь основной рабочий процесс выглядит так:

git clone git@myserver:the-project-name
composer install

Это клонирует репозиторий проекта и устанавливает необходимые зависимости. Фантастический.

Но я также хочу иметь возможность использовать некоторые «скелетные репозитории» и просто копировать их содержимое в свой проект, сохраняя информацию о зависимостях.

Возьмите этот пример:

  • Я создаю репозиторий git под названием: test-project, затем клонирую его локально.
  • У меня есть еще один репозиторий git, называемый fb-bootstrap, который является скелетом для приложений facebook.
  • У меня также есть еще один git-репозиторий начальной загрузки, который я также хочу включить: например, это будет папка api/. Назовем это: API-бутстрап
  • Поэтому я тоже хочу клонировать их, но, конечно, я не могу этого сделать, потому что у меня уже есть репозиторий git в том же каталоге.
  • Возможное решение: я использую следующий код, поэтому я получаю только файлы: 'git archive --format=tar --remote=git@myserver:the-bootstrap-repos HEAD | смола xf-'

Это нормально, НО у него есть проблема: у меня разные зависимости - разные файлы composer.json. - для репозиториев fb-bootstrap и api-bootstrap, поэтому мне нужно найти способ установить их все.

Обратите внимание, что я не использую композитор для этого, так как я не могу поместить что-либо в папку поставщика/, кроме автоматически загружаемых классов php, потому что доступ ограничен этой папкой.

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

Подмодули и описанный выше хак с единственным копированием файлов не совсем подходит по вышеупомянутым причинам.

Обзор:

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

Так:

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

Есть ли способ сделать это?

Также: если вы думаете, что я подхожу к этой проблеме совершенно неправильно, пожалуйста, не стесняйтесь сказать мне об этом. Я все равно адаптируюсь к новым техникам, меня не пугают изменения. :)

Любой комментарий приветствуется.


person ZeeCoder    schedule 23.01.2014    source источник
comment
Есть ли причина не просто сделать api-bootstrap библиотекой Composer?   -  person nthall    schedule 23.01.2014
comment
Да: обратите внимание, что я не использую композитор для этого, так как я не могу поместить что-либо в папку поставщика/, кроме автоматически загружаемых классов php, потому что доступ ограничен этой папкой. Снятие этого ограничения также не решит проблему, потому что, если я добавлю зависимость позже и вызову обновление композитора, я могу потерять изменения, которые я сделал в папках начальной загрузки.   -  person ZeeCoder    schedule 24.01.2014
comment
Извините, не совсем понял при первом прочтении. Как насчет использования пользовательского установщика для установки api-bootstrap где-то помимо vendor/ ?   -  person nthall    schedule 24.01.2014
comment
Ну, я мог бы использовать подмодули git, но при этом я был бы ограничен подпапкой. Некоторые репозитории начальной загрузки должны иметь файлы в корневой папке.   -  person ZeeCoder    schedule 25.01.2014


Ответы (1)


Тем временем я решил проблему более или менее.

Во-первых, я отказался от идеи полной автоматизации всего.

Слишком много проблем с объединением различных репозиториев начальной загрузки; все может случиться, на самом деле.

Одна вещь, которую я все еще хотел автоматизировать, — это объединение различных зависимостей репозиториев начальной загрузки.

Итак, после этих изменений я придумал очень простой скрипт, использование которого выглядит так: (Обратите внимание, что gitcopy — это скрипт, который я использую в своей среде Linux, который копирует только содержимое репозитория.)

gitcopy git@server:bootstrap // Grabs the bootstrap.php file from a private repo.
php bootstrap.php fb-bootstrap api-bootstrap

Вторая команда создаст новую папку: «bootstrap» и клонирует в нее репозитории. Затем он удаляет папки .git, так как мне там не нужен контроль версий. Он также загружает базовый composer.json и объединяет в него все остальные файлы composer.json из загрузочных файлов. Файлы bootstrap composer.json удаляются в процессе, поэтому я могу просто скопировать содержимое bootstrap в корневую папку моего проекта без запросов на перезапись других файлов composer.json.

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

Благодаря этому я мог использовать генераторы Yeoman и по-прежнему использовать свои собственные файлы начальной загрузки, не беспокоясь о конфликтах.

Единственное, что я не мог понять, это как сделать этот скрипт исполняемым файлом phar, чтобы он мог работать как композитор. Вместо того, чтобы взять репозиторий bootstrap для bootstrap.php, я мог бы просто сказать: bootstrap api webapp etc.

Но это на другой день. :)

person ZeeCoder    schedule 26.01.2014