Мы решаем эту проблему с помощью Externals в Subversion, которая позволяет вам извлекать вещи из другого (немного) репозитория.
Затем, когда мы создаем решения, у нас есть общие проекты, сгруппированные в одни и те же папки с решением для конкретного проекта - то есть, когда мы проверяем вещи, у нас есть:
Solution1
+---Project1
+---Project2
+---Project3
+---Common1
+---Common2
Затем отдельно:
Solution2
+---ProjectA
+---ProjectB
+---ProjectC
+---Common1
+---Common2
Поскольку у нас есть внешние настройки и структура каталогов / папок, настроенная таким образом, вы, теоретически, должны иметь возможность извлекать (или экспортировать) «решение» в пустой каталог и успешно создавать его с нуля (при условии все необходимые инструменты устанавливаются) и поэтому TeamCity (или каким бы ни был ваш сервер непрерывной интеграции) также должны иметь возможность создавать его с нуля. На самом деле, даже до того, как мы начали использовать TeamCity, я использовал это в качестве политики, но значение становится яснее, когда вы начнете выполнять непрерывную интеграцию.
Соответствующий бит Красной книги Subversion находится здесь: Внешние определения