We have a small team currently working on numerous projects. We originally started out as a two person team and jumped in head first without any kind of source control. We currently break numerous best practices and do development on live sites (yuck, I know).
We're in the process of fixing this issue incrementally. The first step, which we're in the midst of implementing, is separate development and production instances of sites and internal processes for pushing code from dev to prod and how to handle situations that require rolling back those changes. This still leaves us with the issue of more than one developer working on the same file and overwriting each other.
The next step, and this is where my question comes in, is implementing a much larger, sweeping change, and implementing source control. Obviously, source control works best when each developer has their own local repository. My searches have yielded mostly scenarios that involve a remote SCM server and each developer pulls down a copy to their local machine for development. For a myriad of reasons, which I won't get into here, development on local machines won't work for us, so, please don't respond with questions about why we don't just do development on local machines.
So, what I'm envisioning is a remote development server that can serve multiple functions. First, it can act as the staging server for our projects. Second, it can act as the development server for all our developers. Their IDE, obviously, would still be on their local machine and they'd connect to the remote development server as they've always done. The rub is integrating source control into the mix.
Let me throw out the disclaimer that I know enough about source control to be dangerous, but not enough to actually implement anything.
With that said, here are my thoughts.
1) The application server supports instances, so staging and each developer would have their own instance.
2) Staging and each developer would have their own root folder on the server and sites within each root folder would be accessible via subdomain, like so:
D:/Dean/...
.../Inetpub/wwwroot/example1.com/wwwroot/ ---> dean.example1.com
.../Inetpub/wwwroot/example2.com/wwwroot/ ---> dean.example2.com
.../Inetpub/wwwroot/gaggle.com/wwwroot/ ---> dean.gaggle.com
.../Inetpub/wwwroot/yoohoo.com/wwwroot/ ---> dean.yoohoo.com
.../Inetpub/wwwroot/bong.com/wwwroot/ ---> dean.bong.com
D:/Sue/...
.../Inetpub/wwwroot/example1.com/wwwroot/ ---> sue.example1.com
.../Inetpub/wwwroot/example2.com/wwwroot/ ---> sue.example2.com
.../Inetpub/wwwroot/gaggle.com/wwwroot/ ---> sue.gaggle.com
.../Inetpub/wwwroot/yoohoo.com/wwwroot/ ---> sue.yoohoo.com
.../Inetpub/wwwroot/bong.com/wwwroot/ ---> sue.bong.com
D:/Jorge/...
.../Inetpub/wwwroot/example1.com/wwwroot/ ---> jorge.example1.com
.../Inetpub/wwwroot/example2.com/wwwroot/ ---> jorge.example2.com
.../Inetpub/wwwroot/gaggle.com/wwwroot/ ---> jorge.gaggle.com
.../Inetpub/wwwroot/yoohoo.com/wwwroot/ ---> jorge.yoohoo.com
.../Inetpub/wwwroot/bong.com/wwwroot/ ---> jorge.bong.com
D:/Li/...
.../Inetpub/wwwroot/example1.com/wwwroot/ ---> li.example1.com
.../Inetpub/wwwroot/example2.com/wwwroot/ ---> li.example2.com
.../Inetpub/wwwroot/gaggle.com/wwwroot/ ---> li.gaggle.com
.../Inetpub/wwwroot/yoohoo.com/wwwroot/ ---> li.yoohoo.com
.../Inetpub/wwwroot/bong.com/wwwroot/ ---> li.bong.com
D:/Staging/...
.../Inetpub/wwwroot/example1.com/wwwroot/ ---> staging.example1.com
.../Inetpub/wwwroot/example2.com/wwwroot/ ---> staging.example2.com
.../Inetpub/wwwroot/gaggle.com/wwwroot/ ---> staging.gaggle.com
.../Inetpub/wwwroot/yoohoo.com/wwwroot/ ---> staging.yoohoo.com
.../Inetpub/wwwroot/bong.com/wwwroot/ ---> staging.bong.com
Each of these root folders would contain all resources necessary to make these sites function -- code libraries, user-defined function files, custom tags, components, third-party assets like Bootstrap, Font Awesome, etc.
Additionally, each of these root folders will act as the home for all "local repositories" for each developer and the staging root folder will act as the home for finalized code for QA before deployment to production.
3) A single instance of IIS would support all of this. As developers are tasked with writing web code and not with managing any aspect of IIS, how requests are parsed prior to handing it to the application server for their code to process, etc., I don't see any issue with IIS being a single instance (in fact, it makes it easier to enforce similarity of environment).
4) I haven't settled on a source control solution yet. I'm leaning toward some manner of DVCS like Git or Mercurial.
5) It appears that separating the repository from the IDE so they're on separate machines is somewhat problematic. As seamless integration with source control within the IDE is the surest way to gain adoption, I'd love to be shown my understanding is incorrect.
So, after all this, my question is...
How can we have source control and have developers working on a remote development server and have it seamlessly integrated into their IDE?
Also, a helpful (or annoying, depending on your perspective) caveat is we're a ColdFusion house and use ColdFusion Builder 2016 (which is Eclipse, under the hood) so whatever solution there is would need to work with that. We're also running Windows Servers and a mix of Windows and Mac local machines, if that affects the solution you'll suggest.