Используя git и submodule, какова хорошая структура папок?

Я использую git с подмодулями, и мне трудно разобраться, как организовать мои файлы. Я занимаюсь разработкой на PHP и использую модульное тестирование. Итак, сейчас я использую эту организацию для каждого модуля:

  • SRC /
  • Тесты /

Это кажется блестящей идеей, но проблема в том, что когда я делаю "git submodule add" для проекта, у меня будет такой путь: project / modules / News / src / index.php

Папка src / действительно проблематична.

Должен ли я просто поместить все мои файлы в корень модуля, и в исходной папке есть папка tests /? Для меня это звучит плохо. Что делаешь?

Изменить: src / Папка проблематично из-за автозагрузки. Я не должен был ставить "src" во всех моих именах классов...

3 ответа

Решение

Макет вашей папки в основном не имеет значения, если автозагрузчик может как-то найти ваши файлы. Если вы используете соглашение PEAR для сопоставления имен классов с их исходными файлами, вы можете добавить каталог src в путь включения или создать второй автозагрузчик. Тогда вам не нужно добавлять src к именам классов.

Альтернативой соглашению PEAR будет использование статического отображения между файлами и классами. На GitHub есть инструмент, который может автоматически генерировать такой автозагрузчик для вас.

Подход статического автозагрузчика также используется в PHP Project Wizard. Этот инструмент создаст папки src и tests, включая конфигурацию phpunit и файл сборки, чтобы связать ваш проект с Jenkins CI. Это удобная упаковка.

Что касается включения подмодулей, рассмотрите возможность помещения их в папку lib или ext. Пример того, как это выглядит, можно найти в проекте phpdox на GitHub. Убедитесь, что вы также посмотрите на основной файл начальной загрузки, чтобы увидеть, как включить различные автозагрузчики.

Когда я столкнулся с этой проблемой, я создал папку с названием vendors и поместил в нее все подмодули. Затем я сделал символические ссылки, используя относительные пути каталогов к местам, которые я хотел, в моем коде. Вы можете зафиксировать символические ссылки в git, и они все равно будут работать, когда другие извлекают хранилище. Конечно, это работает только если вы используете ОС *nix.

Например:

modules/
vendor/module1/src/

Может быть символьная ссылка так (из каталога модулей):

ln -s ../vendor/module1/src module1

Не уверен, решит ли это вашу проблему или нет.

У меня не было бы тестов в отдельном модуле. Храните его в том же хранилище.

Другие вопросы по тегам