Our unique circumstances:

  • 1 Apache server (located)
  • 30 gb of information, 100s of folders/projects
  • files are 99% html/php/js/css, with a lot of pdf/ppt/paperwork etc.
  • Several designers, working from different locations, using own computer systems
  • Some devs only have use of certain sites (using different ftp accounts)
  • All updates are created with FTP directly, saving over old files
  • The webhost makes fundamental daily/weekly backup copies, but use of individuals files requires their help

Now we all know this is not near an optimal solution. Every occasionally somebody accidentally removes working files with wrong ones and so forth.

What must we do in order to this:

  • All files are instantly supported, so mistakes could be retrieved easily and safely
  • Devs should not need to change their workflow much, we actually, enjoy the car-save-to-FTP functionality of Dreamweaver &lifier WinSCP
  • We obtain the brand new, better method of trying to affect even the current files

?

Argh!! I needed to say it. :)

Your workflow assumes that mostly designers focus on only certain well-defined areas of the project, right? Else, I believe your present setup just will not work.

Then your first strategy would be to create separate source databases of these separate 'projects'. I personally use the word project loosely to mean functionality (e.g. search), area of the website (e.g. About Us) or however else you divide in the work.

I would not opt for SVN. No new project should if you are beginning from the clean slate. With git, I'd begin with the next:

  1. Create a listing of sub projects based on folder structure (no overlapping files/folders)
  2. Commit these to separate git databases
  3. Produce a master git project and import each one of these git databases as submodules into your path
  4. Give repository-specific write permissions towards the designers as before
  5. However, all them them should have the ability to read all databases
  6. Just one git clone from the master repository then the submodule init command will initialise the repository for every developer