Version Control – Managing with a Central Development Server (LAMP)

gitsvnversion controlweb-development

I'm working in a small team with up to 5 (web)developers. Because our team is growing frequently and we ran into problems with multiple people working on the same code we decided to set up a VCS.

Current Situation

Currently we are working with a central development server (LAMP). So every developer works on the same code base and if the code is tested and ready for our live server we just copy it via ftp. I know this is some sort of an anno 1600 workflow but yeah – it is what it is and also the reason for this question.

On the development server our directory structure looks like this:

/var/www 
      /Project1 
      /Project2 
      /Project3 
      ...

Additionally there are some small non-webapplications – Android/iPhone/Windows 8 etc. apps and some C# tools which also should be included in the VCS.

Goal and problems

Our goal is to get a clean setup for a VCS, which works together with an issue tracking software, enables us to work togheter on the same project at the same time without overwriting our codes and simply gives us the advantage of version-control.

I think the first question for us is, which technology should we use. Some of us have allready experienced subversion. But because git is some sort of becoming the "standard" and there are a lot of "pro git" arguments among the web users we tend to using git.

There starts our uncertainty. For using git – a decentralised VCS – it looks like we have to start using seperate development servers on each developer's computer. The problems with that are:

  • Some times we work on different computers, so when we forget to push our code we have a problem.
  • We would have to work with virtual machines because the dev servers should be the same as our live server (This would simply not be enforceable in our environment, believe me it's not possible).
  • The development server usually also served as a "tryout" or "presentation" server where non-developers had a look at what's going on.

Is there another possible setup with git so that we are able to benefit from the system while still using a single(!) development server? Maybe with different directories for each developer. Or can we still work on the same code base with maybe locking the files we are working on and then commit them to a repository. It's maybe important to say that while it became a factor for us it is still uncommon that multiple developers work on the same part of an application at the same time.

Best Answer

You're on the right track, here.

Maybe with different directories for each developer.

Yes, definitely different directories for each developer.

The machine you're on is is pretty uninteresting. Just ensure that each developer logs in as himself, and checks out a copy of the git repo under his own home directory. You'll wind up with several copies of the code living in your filesystem, but hey, disk is free.

It's true that git supports decentralized operation. But you won't be using it that way in your typical workflow. Just make sure that a bare repo is available on some convenient server, and have everyone pull from that. Access it via http, ssh, or even via the filesystem if you like.

You mentioned a "tryout" area as part of your workflow. Do yourself a favor. Hire another developer, named Jenkins, who also checks out your code using git. He's implemented here: http://jenkins-ci.org/ (and runs under http://tomcat.apache.org/download-70.cgi). That way every push to the central repo will immediately make an updated version of your website available under Jenkins' home directory, where you can quickly try it out and run sanity checks. We call this Continuous Integration, and it will definitely improve your workflow.