A place to discuss Joel on Software. Now closed.
This community works best when people use their real names. Please register for a free account.
Joel on Software
Business of Software
Design of Software (CLOSED)
.NET Questions (CLOSED)
Fog Creek Copilot
The Old Forum
Albert D. Kallal
I am wondering if anyone has suggestions for a version control system to use for website developments. I know that all such systems can track changes to Perl scripts, HTML, CSS, JPG/GIFs. But, let me give a bit of context below to what I am looking for.
I have been a software developer for about 11 years now. As part of my work, I could not live without a version control system. In fact, 2 years ago I came to this new company and current job and we had nothing. First thing I did was to install one (I won't let you know which one we ended-up with since this is not the answer I am asking for).
In my professional work I do not design websites or web technologies. I mostly develop desktop applications/services/client-server systems, embedded software and so on. As such, I mostly develop in C#/C++/C.
However, I have a personal interest in web design. I have a "very small" website mostly for the family and friends (few photos and instruction as to how to get to my house). I am also involved in my community; where my technical background often let me to put in place/manage some small websites. I even developed a small, Perl-based, content management system for managing news, activities/events and columns.
In those gigs, I would have retrieved a full version of the website using FTP, stored that somewhere on my computer, take a copy of it, worked on it and updated the website from my working copy using again FTP. I know this is just awful! It is barely workable alone (after a while you do not remember where the truth lies: your PC or the website), imagine with two persons. And I cannot believe any professional web developer could live like that with tens of site to manage.
I am again about to transform another website: remove some sections, redesign others and add new sections. I think it would now be more than appropriate to try and use a better revisionning approach. But, I would like a revision control systems that helps me and does not stands in my way. I would like:
1) To work in a "dev" trunk and test it locally on my computer;
2) To be able to "easily" publish the dev trunk on a "dev system";
3) To be able to branch out the dev into "stable" versions;
4) To be able to "publish" the stable versions into a website;
5) Give me tools to compare the website with the source control version, even 2-way merge for those situations where I need to just FIX something in the live system while I am at my mom's without my computer.
6) To be simple to use, install and deploy;
By "publish" I mean a single step operation that would compare the target system with the source control content, advise me as to what are the changes about to be made (any conflicts or else), then send everything to the website using FTP, then make sure the website looks exactly like the source control version.
Any pointers or suggestions? Will I have to make my own solution out of Subversion + a workspace on the website + a few scripts?
Thank you for any advice.
You could do worse than take a look at SourceGear Fortress or Vault. I'm using Fortress for website development along with Dreamweaver and they play nice together.
Not sure if Fortress does everything you need but it doesn't leave excess .svn directories floating around in your website hierarchy.
Also, Fortress is free for one user though you need IIS and some version of MS' SQL server installed - the Express version works without problems.
Avoid Vault like the plague that it is. :)
Seriously, use any real source control system. SVN is fine for small to medium projects, is quite scriptable, and the Tortoise GUI is great if GUIs are your thing.
The "trunk" of the version control repository is the One True Copy. Automate publishing from the tip of the trunk with some scripts, so you always know what's what.
SVN (or any modern source control system, not CVS or Vault) gives you fast branching. Make a branch off the trunk, do your work there, test it, check in daily to your scratch branch. Lose your laptop? No problem, everyhting's in SVN. When you're done with a given change, merge back into the trunk.
SVN isn't the greatest for merging, but with only a few developers it's not a big deal. Do a test branch, change, merge after reading the couple pages of manual on that, and you'll know whether SVN is for you.
Wednesday, June 04, 2008
Skorj why do you say that?
Vault works pretty well for web source code. But I haven't tried to do application-level diff'ing of project files produced by Adobe/Macromedia applications (Illustrator/InDesign/Freehand/Dreamweaver/Fireworks/Flash). Is there a revision control system especially designed for such project files? So you can easily see WYSIWYG the difference in files?
In my professional capacity, I use subversion is exactly the way you describe you want to do:
My live site is actually a subversion working copy (the .svn directories don't bother me and the server is configured to ignore them). It is a checked out copy of the 'Release' branch. To deploy changes to that branch, an "svn update" on the server is all that is needed.
The staging site is configured similarly, except that it's a working copy of the trunk branch where most of the development is done.
On my workstation, I have checked out copies of both the trunk (for development) and the release branches. When I was to deploy changes to live, I merge the trunk onto the release branch and commit. Then I just have to do an update on the server to publish.
If I make changes on the live server, I can commit those on the server to keep the version control up to date.
I've found this system to work extremely well. It's flexible and it's fast.
>My live site is actually a subversion working copy (the
> .svn directories don't bother me and the server is
>configured to ignore them).
You can also do a svn export which is the same as a checkout but without the svn dirs.
Of course if you make a change it will export everything again, but that shouldn't be a problem.
There are some disadvantages of doing an export rather than using a working copy:
a) You have to export everything everytime to make a change. An update is much faster, it only downloads the files that have been changed.
b) If, for whatever reason, you make a change directly to the live site (I try and avoid it but in emergencies it happens) then you can use subversion to track and commit or rollback those changes.
The only advantage of doing an export is no .svn directories. Doesn't seem worth the trade off.
Does your web hosting allow access with "rsync"?
If so, you can either use rsync with the -C option to keep the web host image synchronized to a local working copy (the -C option tells rsync not in include files that CVS and/or SVN ignore). Or you could use SVN export to make a clean copy of the website on your dev machine and use rsync to keep the web host synchronized with it.
For a Windows dev machine, you could use Cygwin rsync.
Can't you just use a Content Management System?
Database will provide history of all changes.
Ability to "embargo" content until a publication date / time. Opportunities for Approval steps for Editors to check work by Authors. Some content can use Structured Data, so that untrained folk can enter the data and the presentation will be consistent. New versions can be previewed on teh site they will run on - avoiding any missing assets etc.
Also: no chance of FTP failing half way through and leaving the site unuseable - the database update for a "publish" action is atomic. (Indeed, site is often unusable/unpredictable DURING FTP upload, but that is often overlooked).
In my case, the webserver is being run by a third parting hosting service. As such, I do not have much control over it. Mostly FTP access, sometimes I even get TELNET access. Sometimes the hosting is Windows-based, other times it is linux-based. The web server is typically Apache.
The content management system might also be a good option for building something from scratch, any suggestions? However, when doing only some limited changes it seems to me a lot of efforts to deploy this.
I have taken a look into finding an 'svn update' that would update a workspace over FTP. It does not seems like something that is already there. I would have to get a separate workspace on my computer to "represent" the website version. Then, use RSYNC or some FTP scripting to update the content. This is not so bad a solution.
I am also looking to use a third party SVN hosting, such as Assembla or Unfuddle to avoid getting into setting up a SVN server home, backing it up, etc. Anyone ever tried this before?
This is NOT typical a professionnal setup. Third party SVN + third party hosting. But again, this website design for me is almost hobby-like, not even a revenue source.
Thank you all for your suggestions.
This topic is archived. No further replies will be accepted.Other recent topics
Powered by FogBugz