Как управлять общими файлами

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

Мы используем codeigniter, и у нас есть некоторые модели, библиотеки и файлы для просмотра, которыми мы хотим поделиться между нашими проектами, и версия этих файлов отдельно от текущего проекта в другом хранилище (или что-то другое, например, с помощью менеджера пакетов — я не что может быть лучшим).

Другими словами, у нас есть Проект A и Проект B (у нас гораздо больше проектов, чем два, это только для примера). Когда мы получаем запрос функции, которая является общей функцией (улучшенная система входа в систему) от владельца Проекта B, мы подготавливаем необходимые изменения, и мы хотели бы загрузить эту модификацию во все другие проекты. Сейчас мы создаем эти модификации в текущем проекте, над которым мы работаем. Это может быть сложно разработать, если мы создадим другой третий проект с собственным репозиторием для этих общих файлов, потому что эти файлы не работают в одиночку, поэтому им нужно другое представление и файлы контроллера для их загрузки и тестирования.

Состав:

root/
application/
model/
auth.php
other1.php
other2.php
library/
mail.php
other1.php

Таким образом, мы хотим, чтобы auth.php и mail.php версии отдельно, чем other.php-s и загрузить в другое место из любого нашего проекта, и проверить, есть ли какие-либо обновления в этом отдельном хранилище общих файлов, и если есть, чем обновить эти файлы в собственном проекте.

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

С субрепозиторием мы получили такую ​​структуру:

root/
.hg/
...
application/
model/
auth.php
other1.php
other2.php
library/
mail.php
other1.php
subrepo-files/
application/
model/
auth.php
library/
mail.php

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

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

0

Решение

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

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

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

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

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

Вы также можете создать урезанную тестовую / макетную версию своего приложения MVC и автоматизировать тесты там.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]