Лучший способ поддерживать несколько связанных проектов в одном репозитории git?

В рамках личного проекта я начал использовать git вместо subversion, возможно, я узнаю что-то новое из этого.

Настройка репозитория была довольно простой, настройка моего веб-сервера для обслуживания файла git работает как шарм; коммит, клонирование, здесь нет проблем.

Однако у меня есть некоторые проблемы с настройкой моего проекта в репозитории. В настоящее время это выглядит так:

project.git
\- mobileapp
\- artwork
\- backend
\- website

website и mobileapp должны связаться с backend, как только все заработает.

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

Поскольку, похоже, нет способа просто проверить содержимое project.git/backend, я думаю о разделении четырех подпроектов на четыре репозитория git с дополнительными накладными расходами на поддержку четырех репозиториев.

Есть ли более простой способ решить мою проблему?


person Dan Soap    schedule 26.12.2012    source источник
comment
подмодули могут быть полезны   -  person ДМИТРИЙ МАЛИКОВ    schedule 26.12.2012
comment
Как насчет того, чтобы просто делать то, что вы делаете сейчас, клонируя в какое-то место на вашем сервере, а затем используя post-hook, который копирует бэкэнд в производственную область после его получения и перезапускает все необходимые серверные процессы?   -  person jdi    schedule 27.12.2012


Ответы (2)


Вы правы в том, что нет особенно простого способа проверить частичный репозиторий Git. (Начиная с версии 1.7.0 Git поддерживает разреженную проверку. но это может не соответствовать вашим потребностям.)

Типичная рекомендация — поместить каждый логически отдельный модуль в отдельный репозиторий. Управление взаимосвязью между этими модулями несколько затруднено.

Один из подходов заключается в использовании подмодулей Git. Это добавляет метаданные в родительский репозиторий Git, которые учат Git, как извлекать соответствующие версии дочерних репозиториев. Затем вы управляете отношениями, делая отдельные коммиты, которые нарушают эти метаданные.

Другой вариант — использовать внешний инструмент, такой как репозиторий в Android. Repo также поддерживает свое собственное состояние в отношении нескольких дочерних репозиториев, но в отличие от подмодулей, которые очень ориентированы на ревизии, repo больше ориентирован на ветки.

Оба подхода работоспособны и показывают философскую разницу в том, как думать об отношениях между модулями. Конечно, это не обязательно «более простой» способ решить вашу проблему.

person Emil Sit    schedule 26.12.2012

Используйте 1_:

$ git submodule -h

E.g.

$ git submodule add [email protected]:<username>/backend.git backend

Тогда вы также можете рассматривать backend как отдельный проект.

person Kjuly    schedule 26.12.2012