We recently made the switch from SVN to GIT for our repo management, and have a good grasp on the non-linear source control style. At the moment, the entire codebase (Mixture of Services, Windows/Xamarin clients and ASP.net website) was dumped into the repo, including various core libraries.
To further improve our workflow, I am trying to separate out all our projects into their own repositories (eg: one for Web Servies, one for Windows Program, etc...), reaching an approximate total of 6 or so separate projects sharing some code.
Now, I have done some research on a few different solutions, but am struggling to find a compromise. In the end, We wish to lock our master
branch of our core libraries, as they are mission-critical and require peer review through pull-requests. Only then will they be accepted.
My first thought was to use GIT submodules, but after some research, I discovered that favour had been given to the newer concept of subtrees.
I played with subtree's in some downtime, and couldn't see any way to choose different branches of a remote subtree (such as the Core Libraries) for different branches of the parent project.
I gave NuGet packages a go as well, but the requirement of editable source which could be committed back and approved was not fulfilled here.
I still haven't seriously looked at submodules here, so maybe their inherently complicated nature is required here? Or am I missing something?