Как отслеживать отдельные проекты с одинаковыми основными файлами в git

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

Есть ли способ, которым я мог бы отслеживать с помощью того же репозитория git суперпапку (root/private/core в моем случае), а также как общедоступные, так и частные каталоги конкретных проектов. Кроме того, если я внесу изменения в файлы ядра в одном проекте, я бы хотел, чтобы изменения были внесены и в другие проекты git repo.

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

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

Упрощенный пример моего каталога на данный момент:

  • root
    • private
      • core
      • projects
        • project1
        • проект2
    • public
      • project1
      • проект2

В частной папке проекта есть основные расширения php, которые относятся к конкретному проекту, а в общей папке проекта находятся только таблицы стилей, javascript и index.


person Deivid Sarapuu    schedule 13.12.2012    source источник


Ответы (2)


Вместо подмодулей (которые имеют собственное ограничение — «вы не можете изменять содержимое подмодуля из основного проекта» — и изменит ваш обычный рабочий процесс Git) вы можете подумать о git-subtree, и в этом случае ядро ​​будет добавлено как поддерево (но все равно будет существовать как отдельное репо) во всех суперпроектах. Пример использования git-subtree в ситуации, напоминающей ваше состояние

person Lazy Badger    schedule 13.12.2012
comment
вы не можете изменить содержимое подмодуля из основного проекта? Конечно, вы можете: stackoverflow.com/questions/1979167/git -подмодуль-обновление/ . Это для компонентного подхода, в отличие от системного подхода с поддеревом: stackoverflow.com/questions/769786/vendor-branches-in-git/ - person VonC; 14.12.2012
comment
@VonC - прочитайте правильные источники, прежде чем отвечать. Git-boys сводят меня с ума! Я ничего не сказал о git update, я процитировал ману git-submodule, и это не моя формулировка ...история двух проектов по-прежнему остается полностью независимой, и вы не можете изменять содержимое подмодуля из основного проекта. Проще говоря: если вы изменяете файлы в супермодуле и подмодуле, вы не можете зафиксировать все сразу (по крайней мере, я так прочитал ) - person Lazy Badger; 14.12.2012

Я также изучил подмодули, но это тоже не лучшее решение.

Тем не менее, это может быть допустимым решением с:

  • private родительский репозиторий, включая core, project1 и project2 в качестве подмодулей
  • public родительский репозиторий, включая project1 и project2 в качестве подмодулей

Каждый раз, когда вы изменяете подмодуль (например, project1 в private), вам необходимо:

  • зафиксируйте, отправьте его в репозиторий восходящего потока (то же самое для родительского репо private),
  • перейдите в тот же подмодуль другого родительского репо (public/project1)
  • git тянуть

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

person VonC    schedule 13.12.2012