В идеале, и это будет основано на моем собственном мнении и опыте работы с более крупными отдельными приложениями, но с зависимостями вы хотите иметь репозиторий для отдельного, несвязанного проекта и сохранять связанные, возможно, зависимые проекты в рамках тот же репо. Я не большой поклонник субпозиториев, но это может быть просто из-за отсутствия воздействия.
Причина этого в том, что вы должны захотеть совместить версии проектов, так как изменение одного может повлиять на другое. На самом деле, все, что можно объединить в одно решение и иметь ссылки на проекты, вы определенно хотите сохранить вместе.
Теперь, есть некоторые исключения, когда у вас может быть библиотечный проект, который вы не можете обязательно иметь как часть решения, но который является ссылкой для набора проектов. Здесь я бы сохранял версию папки lib вместе с остальными приложениями в том же репозитории, но папка lib содержит сборки перед сборкой. Он также может содержать сборки сторонних поставщиков. Это также важно для создания версий вместе с проектом, который их использует, поскольку вы можете рассматривать обновление библиотеки для основного проекта как вспомогательный выпуск.
Для других проектов, которые действительно независимы, создайте для него другой репозиторий, так как у него будет собственный срок действия версии, и вы не хотите, чтобы его изменения влияли на график изменений для других, совершенно не связанных между собой проектов.
Пример макета с несколькими связанными проектами и папкой lib:
[-] Big Product Repo
--[-] Big Product 1
----[+] Dal
----[+] Services
----[-] Web
------[+] Controllers
------[+] Models
------[+] Views
--[+] Big Product 2
--[-] lib
----[+] iTextSharp
----[+] nHibernate
Пример макета с другим проектом, не связанным с ним (для примера, проект служб Windows):
[-] Small Product Repo
--[-] Windows Services
----[+] Emailer
----[+] Task Runner
В действительности, однако, ваша структура папок не так важна, как обеспечение того, чтобы проекты, которые обрабатываются как одна логическая единица (продукт), сохранялись вместе для обеспечения контроля над тем, что создается и выпускается. Это мое определение того, что должен содержать репозиторий и что я использую, чтобы думать о том, как разделить вещи, если существует более одного продукта с поддержкой версий.