I'm looking for some advice on how I should arrange a large new project I'm working on to allow it be more easily managed in Git (using GitLab), and developed in Visual Studio.
To give an idea of scale, this is an entire server backend which'll consist of some networking services (sockets), data processing services, and web services. Each of these services will be an individual project, but there is going to be a lot of common code involved which I'll want to separate and between them (i.e. shared assemblies).
So let's say I have the following Visual Studio projects, with the shown dependencies:
Utility
SharedSocketCode - [ Utility ]
SocketServiceA - [ SharedSocketCode ]
SocketServiceA.WindowsServiceHost - [ SocketServiceA ]
SocketServiceA.ConsoleHost - [ SocketServiceA ]
SocketServiceB - [ SharedSocketCode ]
SocketServiceB.WindowsServiceHost - [ SocketServiceB ]
SocketServiceB.ConsoleHost - [ SocketServiceB ]
DbEntityModel
DataLogServiceA - [ DbEntityModel, Utility ]
DataLogServiceB - [ DbEntityModel ]
SharedWebServiceCode
WebServiceA - [ SharedWebServiceCode, DbEntityModel ]
WebServiceB - [ SharedWebServiceCode, DbEntityModel ]
As you can see, there is going to be a lot of shared code, and this is just the tip of the iceberg! I'm torn between storing all of this in the same repository, or trying to split them into individual ones.
The former sounds like the easier to maintain as I won't have to wrestle with Visual Studio looking for shared code in what could be different locations on each user's local version - the projects will all be predictably stored at solution-level.
The latter sounds like it'll give me more control over versioning each component and logically separating out what would otherwise be a single mammoth code base.
I'm quite new to Git and GitLab, so I'm not sure if there is anything that can help with this kind of scenario. Any advice would be welcome.
(FYI, I've added the GitHub tag as I gather it is reasonably similar to GitLab so there may be some assistance I can get from its users too)