I have a few questions of source control. Myself and another web developer have joined a company to take over software development of old and future projects. The company has no source control, as old projects were developed by external contractors with there own versioning systems. I want one setup ASAP but I have some questions about the 2 popular choices that I have been unable to find answers too, so not just another GitHub vs Subversion topic.
Some background on the projects to be stored. There are several older projects, mostly driver/firmware. New projects by myself will be more .Net/Java based, and the web developer will be wanting to store website content.
From what I have read and tried, I prefer Github, but the web developer is becoming more adamant on using Subversion. Another consideration maybe I am on a Windows machine and the web developer is on a Mac, so the clients available will differ. I am hoping we can both use the same source control, rather than go our separate ways. The first source control I used was team foundation server, where we had one repository and subdirectories for each project from the root.
Q1. Concerns about GitHub, the basic package will allow for 10 repositories. Considering there are already 5 websites, dozen older software projects, 3 new projects and even more still to come, I feel we would be limited on the number of projects we could host, even if the edits are few and far between as projects get older. Given with Git you seem to clone/checkout the whole repository. Would I be correct in assuming I could not store several projects in one repository, just under different sub directories.
SoftwareRepo/Project1/Code
SoftwareRepo/Project2/Code
SoftwareRepo/Project3/Code
SoftwareRepo/Project4/Code
Or instead of subdirectories try using branching, so you have an empty repository which you branch from, where each branch contains the content for each different project. The drawback I see here is when you switch branches (or projects in my case) the files of the old project become hidden in file explorer until you switch back to the previous branch (previous project).
I think what we need is a higher number of repositories, and a cap on the disk space they use up as we may have dozens of smaller projects that are one offs and really only require source control during active development, and then a few bigger projects that would make use of GitHubs powerful features like branching.
For the clients, I have found SmartGit to be very useful in managing the test repositories I created, against the command lane which I originally tried to use.
Q2. If we use SubVersion, we could host it ourselves. I have a i7 with 6GB ram so offered to run up a virtual machine but the web developer is unhappy that I maybe out the office so the subversion server would down, and neither are they happy with my machine running 24/7 like a server. We do have a business server but the outsourced administrator is extremely touchy on running processes so we cannot place subversion on that either. The server harddrive is atleast backed up daily. Is it possible to store the repository files on our business server and just use clients to access subversion files, or is a subversion server process required for clients to access the repository files. The web developer is considering running an SVN server in the Amazon E2C cloud, but I have no experience with it so cannot comment.
My concern with subversion is I have used it before, and had some very strange error messages with TortiseSVN that had me deleting my checked out folder and redownloading the source from the repository due to conflicts (that didnt seem to exist), before I could checkin any code.
If you had lots of small projects of varying types, which source control client would you pick and which approach would you take (online host, host ourselves).
Im trying to work out what is the best solution out of the options available.
EDIT
Disappointingly, We have gone with SVN in the end. Not my personal choice but we had incredible difficulty in trying to setup Git on a windows machine and run it as a server. It requires lots of additional installs, setup of SHH, and management via the command line. As shown in this guide – http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/
SVN on the otherhand we used VisualSVN Server, pointed it to a network drive to store repositories and we were on our way. A single installer and easy to use management console.
If Git could be done as a single installer with a management GUI we would have used it as I think it is more flexible and reliable given we have had SVN error messages already, (corrupt files/files doe snot exist/run cleanup etc.)
I think you’ve missed the point a little bit on git. From the man page: “Git natively supports ssh, git, http, https, ftp, ftps, and rsync protocols.” That not only means you can host it yourself from your i7 if you want, but if your “business server” has already set up one of those you can use it without needing the sysadmin to install anything else.
Also, the distributed nature of git means you don’t need to have only one central repository, and you don’t need to have all your repositories always online. As long as you are regularly online to share changes with one another, you can each host your own git repository wherever you want, checking in changes to your own as needed, and pulling changes from the other as needed. That kind of flexibility sounds ideal for your type of situation.