I’ve been trying to figure out how I might work with a DVCS with a huge code base, hundreds of developers and providing builds to people in a CI way. Git has my full attention at the moment, (Mercurial’s nice too, especially after reading about branching strategies and how universal it is); but there’s significant issues using it on Windows, mostly because Windows isn’t a POSIX system.
I had a small adventure trying to get OpenSSH setup on my windows machine through Cygwin and it was a mess, didn’t work and just overall felt clumsy. Next I tried serving through http, but still not what I’m looking for because in the end, a co-developer needs to push changes to me and Git requires SSH for that.
I also tried using a git-configured Virtual Appliance for VMWare. It wasn’t so much a pain, but slow across the network. I’m no VMWare guru, so I’m sure there’s certain things I could do to boost performance, but I didn’t know them. Furthermore, the SSH keys produced from Cygwin didn’t seem compatible with those produced by the appliance. In the end, I had to generate the keys on the appliance, scp them back to my windows machine and then use them as my local keys. Ugh… that won’t work for a massive audience unless I created a web service that gen’d keys and handed them to you over the connection (dangerous? risky?). Still a kludge.
Finally, after reading further documentation, I learned that I could merely use UNC file paths with Git instead of using a hosting server. Sure, a hosting server is nice because through Gitosis, I can very easily add new repositories, expose them through a web interface, give the public access, etc. But using UNC paths allows me to do things more windows-eque. I can set user permissions in ActiveDirectory and create repository shares in a central location with global read access (allowing pulls and clones for anyone) and give group-based permissions to users for writing (pushes, merges, etc). Not bad.
I’m sure it would also be easy to configure gitweb to use UNC paths or mounted drives so that I can have that lovely web interface as well, or write my own.
Now I just have to experiment with very, very large code bases, figure out how to package a build, and make it generally very, very easy for people to pull and push.