Окремо!
Насправді я, мабуть, мав три сховища: одне для Клієнта та відповідних клієнтських бібліотек, одне для Сервера (та відповідних бібліотек) та одне для спільних бібліотек (включаючи інтерфейси API, які відкривають функціонал між двома , плюс будь-який інший спільний код). Я думаю, що це дійсно ключ, спільний код повинен перейти в окреме власне сховище. Таким чином, ви можете переконатися, що сумісність між вашим клієнтом і сервером завжди є в одній і тій же версії І ізольовані від дизайну кожного його споживача.
Очевидно, це не завжди можливо, залежно від конкретної комунікаційної системи, яку ви використовуєте, але, швидше за все, існує спільний код, який диктує формат об'єктів передачі даних або кроки рукостискання у вашому користувальницькому протоколі (або якомусь іншому прикладі) .
Якщо припустити, що у вас є досить пристойна програма безперервної інтеграції та забезпечення якості (на моєму досвіді досить велике припущення, але я все-таки хочу зробити це. Якщо у вас немає відділу з питань якості, ви повинні принаймні отримати деякі ІС). Вам не потрібно використовувати шаблон єдиного репо як захист від можливих невідповідностей коду, або ваш сервер CI позначить сумісність бібліотеки, або ваша команда QA виявить помилки під час виконання (або, ще краще, ваші тестові модулі).
Переваги розділених сховищ полягають у можливості окремо виконати версію окремих частин системи. Хочете взяти копію Сервера минулого тижня і запустити її разом із Клієнтом цього тижня, щоб спробувати зафіксувати корінь проблеми продуктивності? Не хвилюйтесь.