• Как частично объеденить проекты через cистему управления версиями?

    Henryh
    @Henryh
    Веб-программист
    Верно, для одинаковых файлов вам поможет Subrepository.
    В Mercurial это очень интересная вещь. Алгоритм работы примерно такой:
    Внутри своего проекта создаёте папку c субрепозиторием, например library, в ней инициализируете (или клонируете готовый) проект общей библиотеки проекта:
    $ mkdir library
    $ cd library
    $ hg init
    Указываете, что эта папка является субрепозиторием, для этого в корневом проекте создаётся файл .hgsub и указываете там библиотеку:
    $ echo 'library' >> .hgsub
    Стоит не забывать, что коммитить library нужно будет по отдельности от основного проекта (или указывать специальный ключь), и изменённая библиотека в общий репозиторий попадёт только после коммита в основном проекте.
    Если изменения в library произошли отдельно от проекта (это часто бывает так как проект уникален а library единая для многих проектов) получить свежие обновления без прямого пула (hg pull) из самой library не возможно, так как Mercurial не умеет рекурсивно обновлять субрепозиториии. Но для этого можно использовать небольшую хитрость, можно явно указать какие субрепозитории необходимо обновить при обновлении основного репозитория, делается это при помощи секции [hooks] в персональный mercurial-настройках проекта (.hg/hgrc), например так:
    В файл .hg/hgrc пишем:
    [hooks]
    preupdate = ./library/hgsubupdate.sh
    А в файл hgsubupdate.sh:
    hg pull -R library --update
    Тогда, при выполнении команды hg update в основном репозитории рекурсивно обновятся и субрепозитории указанные в хуках.
    В новых же проектах, вы можете просто делать форк основного репозитория и вести его абсолютно отдельно, а общие субрепозитории будут подгружаться также.
    Ответ написан
    Комментировать
  • Как частично объеденить проекты через cистему управления версиями?

    vollossy
    @vollossy
    Веб-разработчик с небольшим опытом работы
    Не уверен, насколько будет корректен мой ответ, Вы ведь насчет системы контроля версий спрашивали, но я бы порекомендовал использовать менеджер зависимостей. Если работаете с php, то есть composer, который делает все то, что указали в первом вопросе(не уверен, правда насчет других языков). По остальным двум пунктам -- присоединяюсь к @maxaon
    Ответ написан
    Комментировать
  • Как частично объеденить проекты через cистему управления версиями?

    maxaon
    @maxaon
    По поводу первого. Как я понял, вам просто надо выделить общий код в отдельный репозиторий. Далее, для локальных проектов, делать просто
    hg pull http://bla.com/main/baseproject
    git pull http://bla.com/main/baseproject.git

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

    По поводу второго вопроса:
    Можете тоже отдать на растерзание системе контроля версий, однако мержить будет сложновато, когда изменены строки в обоих репозиториях.
    Наилучший вариант, это когда есть три файла:
    1. Настройки по-умолчанию в базовом проекте.
    2. Файл настроек проекта.
    3. Файл настроек разработчика.

    По поводу третьего вопроса:
    Вам необходимы миграции БД. Это вообще отдельный механизм который правильно сделать тяжело, а жить без него трудно.
    Ответ написан
    Комментировать