Git Проекты с общим кодом - PullRequest
       2

Git Проекты с общим кодом

5 голосов
/ 22 апреля 2011

У нас есть несколько проектов, которые делятся большинством своих файлов кода / конфигурации. Фреймворк, который мы используем, имеет определенные зависимости каталогов и файлов, которые ограничивают нас в том, насколько мы можем отделить общий код. Например, между 'common', 'projectA' и 'projectB' у нас может быть:

/ Projecta

  • / shared_dir1
    • common1
    • fileA1
    • fileA2
  • / common_dir2
    • common2
  • / dir3
    • fileA3
  • common3
  • fileA4

/ projectB

  • / shared_dir1
    • common1
    • fileB1
  • / common_dir2
    • common2
  • / dir3
    • fileB2
    • fileB3
  • common3
  • fileB4
  • fileB5

В настоящее время мы управляем этим с помощью 3 Git-проектов: 'common', 'projectA' и 'projectB', с общими файлами, разделенными на 'common', и файлами, специфичными для проекта, в их собственных проектах. 'projectA' и 'projectB' имеют .gitignore с записями для всех общих каталогов и всех общих файлов под каждым общим каталогом. Скрипт копирует «общий» в проект, в котором вы хотите работать, и разработка там завершена. После внесения изменений другой скрипт копирует все общие каталоги и общие файлы обратно в «общие». Изменения в «общем» и в проекте можно увидеть через «git status».

Это, очевидно, связано с головными болями: копировать туда-сюда между «обычными», сохранять точность .gitignore и переключать ветки внутри «projectA» и «projectB». Однако, поскольку мы планируем использовать 'projectC-F', этот подход кажется хорошим, поскольку мы можем избежать объединения общих изменений в N проектов.

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

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Рассматривали ли вы git поддерево?

Нечто подобное можно сделать:

git remote add common git://server/common.git
git fetch common
git checkout -b common_branch common/master
git checkout master
git read-tree --prefix=common/ -u common_branch

Подробнее в ссылках ниже:

http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html

http://progit.org/book/ch6-7.html

1 голос
/ 22 апреля 2011

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

Вот пара ссылок:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...