У нас есть большой проект, состоящий из следующего:
Люди используют проект всеми возможными способами:
В настоящее время A, B и C находятся в одном хранилище Subversion. Мы переходим на Git / GitHub, поэтому у нас есть возможность реорганизоваться. Мы думаем о разделении A, B и C на их собственные репозитории. Это вызывает у нас несколько вопросов:
Мы глубоко задумывались над каждым из этих вопросов, но хотим услышать, как сообщество подойдет к этим вопросам. Возможно, git submodule / subtree является частью решения некоторых из них? Мы не использовали ни один из них, и кажется, что субмодули вызывают у людей головную боль. У кого-нибудь есть истории успеха с любым из них?
Хорошо, я выглядел в похожей проблеме, как вы (несколько взаимодействующих проектов), и я попробовал три возможности subtree
, submodules
и один простой репозиторий с несколькими папками, содержащими отдельные части. Если есть больше / лучшие решения, я не знаю о них.
Короче говоря, я пошел на один репозиторий, но это может быть не лучшим решением в вашем случае, это зависит …
submodules
в том, что он позволяет легко управлять, так как каждая часть сама является репо. Таким образом, отдельные стороны могут работать только над своим репо, а другие части могут быть добавлены из предопределенных бинарных выпусков / … (как вам угодно). Вы должны добавить дополнительное репо, которое объединяет отдельные репо вместе.subtree
метод лично. Для меня (лично) синтаксис кажется неуклюжим, и выгода не слишком велика.master
ветка. Это нормально в основном для чтения удаленных репозиториев (если я занимаюсь разработкой только на A, но мне нужны B и C), но не для регулярных модификаций (в примере для A).Вы видите, что выбор зависит от того, насколько близко отдельные части A-C связаны между собой. Здесь я могу только догадываться:
Если вы находитесь на более ранней стадии разработки, где изменения во всем дереве исходного кода являются общими, то одно большое репо лучше обрабатывается, чем разделенная версия. Если ваши интерфейсы в основном постоянны, разделение позволяет делать небольшие репо и более строгое разделение вещей.
Код SWIG и код C ++ кажутся довольно близкими. Таким образом, разделение этих двух элементов кажется менее практичным, чем разделение GUI от остальных (на мой взгляд).
Для вас другой вопрос «Как обращаться с новыми разработчиками / (не) отслеживая машинно-сгенерированный код?»:
Сколько коммитов сделано / требуется (только релизы или каждый отдельный коммит)? Если интересны только релизы, вы можете использовать бинарные пакеты. Если вы намереваетесь совместно использовать каждый отдельный коммит, вам придется предоставить много разных двоичных версий. Здесь я хотел бы предложить, чтобы они скомпилировали все дерево один раз, потратив несколько минут, а оттуда восстановление занимает всего несколько минут. make
это не должно занять слишком много времени. Это можно даже автоматизировать с помощью хуков.
Других решений пока нет …