У меня есть несколько проектов (проекты Eclipse), и я пробовал разные вещи, чтобы выяснить, что работает лучше всего с точки зрения реальной повседневной разработки. Вот что я обнаружил, и я думаю, что большинство людей найдут то же самое, если они будут отслеживать результаты и анализировать результаты объективно.
Короче говоря, применение следующих правил даст наилучшие результаты:
- Сделайте отдельный репозиторий для каждой проектной группы.
- Каждая группа проектов состоит из группы проектов, которые тесно связаны друг с другом, которые должны управляться вместе и которые не могут быть легко отделены друг от друга.
- Группа проектов может состоять из одного проекта.
- Группа проектов, содержащая несколько проектов, должна быть проверена, чтобы увидеть, можно ли отделить некоторые из ее проектов друг от друга, чтобы ее можно было разделить на более мелкие проектные группы, которые все еще содержат проекты, которые тесно связаны друг с другом, которые должны управляться вместе. и это не может быть легко отделено друг от друга.
Следующие рекомендации более подробно объясняют этот процесс для определения проектов, которые нужно поместить в один и тот же репозиторий:
Если проект не тесно связан с каким-либо другим проектом (например, проект может быть открыт без открытия других проектов, и никакие другие проекты не зависят от проекта, открываемого при их открытии), вам обязательно следует поместить его в собственный репозиторий. по причинам, объясненным в ответах выше этого.
Если проект зависит от других проектов или другие проекты зависят от проекта, тогда все сводится к тому, насколько точно они связаны друг с другом, насколько хорошо они могут быть объединены вместе и насколько легко они могут быть отделены друг от друга.
A) Например, проект тестирования, который содержит тестовые классы junit для тестирования классов основного проекта, - это случай, когда два проекта очень связаны друг с другом, могут быть легко упакованы вместе и не могут быть легко отделены друг от друга. Эти проекты должны быть помещены в один и тот же репозиторий по причинам, описанным в части C ниже.
Б) В случае, когда один проект полагается на другой проект для предоставления каких-то общих ресурсов, на самом деле все сводится к тому, насколько хорошо ими можно управлять вместе и насколько легко они могут быть отделены друг от друга. Например, если на проект с общими ресурсами полагаются многие проекты, то его следует поместить в собственный репозиторий, потому что на другие несвязанные проекты влияют изменения в проекте общего исходного кода. В таком случае проект общих ресурсов должен быть отделен от зависимых проектов, а не напрямую связан с зависимыми проектами. (Например, было бы лучше создать архивные файлы с поддержкой версий [Jar-файлы с именем вроде «projectName» .1.0.1.0.jar, например] и включать их копии в каждый проект вместо совместного использования ресурсов путем связывания проектов вместе.)
C) Если несколько проектов связаны, их легко администрировать вместе, но нельзя легко отделить друг от друга, то это зависит от того, насколько тесно они связаны друг с другом.
I) Если проекты помещены в один репозиторий, тогда проекты будут синхронизироваться друг с другом в репозитории каждый раз, когда происходит фиксация, что может спасти жизнь, если проекты тесно связаны. Однако это также создает проблемы, указанные в ответах выше этого.
II) Если проекты помещены в отдельные репозитории, вам нужно будет позаботиться о том, чтобы там коммиты были синхронизированы друг с другом, и обязательно включите какой-то механизм, чтобы указать, какие коммиты принадлежат одной и той же точке синхронизации в проектах ( Возможно, что-то вроде включения одного и того же номера точки синхронизации в комментарии для фиксации каждого проекта, когда группа коммитов выполняется по проектам.)
III) Таким образом, в подобных случаях почти всегда лучше объединить эти проекты в один репозиторий, чтобы уменьшить накладные расходы человеческих усилий на синхронизацию коммитов и избежать человеческой ошибки в случае, если коммиты необходимо откатить. Единственный случай, когда может быть лучше разместить их в отдельных репозиториях, - это когда только один из проектов изменяется регулярно, а другие связанные проекты меняются редко.
person
Danny Remington - OMS
schedule
15.05.2013