Крістофер зробив дуже добру роботу, перерахувавши недоліки моделі "один проект на репозиторій". Я хотів би обговорити деякі причини, з яких ви можете розглянути підхід із кількома сховищами. У багатьох середовищах, в яких я працював, підхід з багатьма сховищами був розумним рішенням, але рішення про кількість сховищ і де зробити скорочення не завжди було легко зробити.
В моєму теперішньому становищі я перемістив бегемотське односкладне сховище CVS з більш ніж десятирічною історією у ряд сховищ git. З того часу, коли було прийнято таке рішення, кількість сховищ зросла (завдяки діям інших команд), аж до того, як я підозрюю, у нас більше, ніж було б оптимально. Деякі нові наймачі запропонували об'єднати сховища, але я заперечував проти цього. Проект Wayland має подібний досвід. У розмові, яку я нещодавно бачив, у них в один момент було понад 200 сховищ git, за що ведучий вибачився. Переглядаючи їхній веб-сайт , я бачу, що зараз їх о 5, що здається розумним. Важливо зауважити, що об'єднання та розділення сховищ - це керована задача, і це добре експериментувати (в межах розуму).
Отже, коли ви хочете отримати кілька сховищ?
- Одне сховище було б занадто великим, щоб бути ефективним.
- Ваші сховища слабко пов'язані або роз'єднані.
- Для розробника зазвичай потрібен лише один або невеликий підмножина ваших сховищ.
- Зазвичай ви хочете розробляти сховища самостійно, і їх потрібно синхронізувати лише періодично.
- Ви хочете заохотити більше модульності.
- У різних сховищах працюють різні команди.
Бали 2 і 3 є важливими лише у тому випадку, якщо точка 1 дотримується. Розбивши наші сховища, я значно зменшив затримки, які зазнали наші колеги з-за події, зменшив споживання диска та покращив мережевий трафік.
4 і 5 більш тонкі. Якщо ви розділите репост скажімо клієнта та сервера, це робить більш дорогим координацію змін між кодом клієнта та сервера. Це може бути позитивним, оскільки заохочує розв'язаний інтерфейс між ними.
Навіть при недоліках проектів, що складаються з декількох сховищ, таким чином робиться багато респектабельних робіт - приходять до ладу Wayland та Boost. Я не вірю, що консенсус щодо найкращої практики ще не розвинувся, і потрібно певне судження. Інструменти для роботи з декількома сховищами (git-subtree, git-submodule та інші) все ще розробляються та експериментуються. Моя порада - експериментувати та бути прагматичним.