Fog Creek Software
Discussion Board




CVS : I can't imagine using it...

Hi

I'm looking for a way to keep information of the different "versions" of the files used on the web site i'm working on.

The web site use coldfusion (same as php, asp), runs on a Win32/IIS server
The developpement team is made of 3 developpers (+ a graphist, + a marketing person)

Today we use the following configuration :
One developpement server, running a similar configuration as the production one (win 2000, IIS, coldfusion, ...)
All the files are shared using the windows sharing system. That means that each developper can directly edit the files.
When we want to commit the files to the production server, we just use a ftp client.
And... sometimes we directly edit the files on the production server (for example to test a page that use fresh data [ie orders of the day], only available on the production server).

This system means 0 on the Joel's test... i'm REALLY not proud of it...

... but at the same time, we are organised well enough to avoid working on same files at the same time. Using the network file sharing means that the IDE we use can instantanetly detect if any change occured on a file we have opened in the IDE.
In 3 years, we had around 3 or 4 big conflicts (data loss because I overwrote a file changed by another developper)... but the problems were solve in around 10-30 minutes by rewriting the portion of code or finding an archive of the previous day.
In fact NO version management works quite well for us... so it's hard to imagine dedicate time for another system...

When I try to imagine how to install CVS, I see :
- it needs that everybody has a local copy of the files (hard disk space !!! beacause we also have lots of pictures)
- it needs that everybody has the server context on his station (or a dedicated computer, $$$)
- I know I have to use cvs alone for a while to prove myself and the others that (if ?) it's usefull

that means that the files will still be directly changed directly on the developpement server : So if i need to edit a file i need :
- to synchronise the local files (changed by my colleagues) with the cvs server (commit from the dev server to the cvs server)
- to update the files from the cvs server to my computer
- to modify my file
- to commit the file to the cvs server
- to make an update to rewrite the files on the developpement server (to avoid the other developpers to make modifications on an older version of the file)

And what about the merging problems...

I really think it's an enormous work for solving so few problems...
so is cvs not the good tool ?

How can I implement that kind of solution without headhache ?

Thanks in advance and sorry for my bad english, it's not my native language

Olivier B
Tuesday, June 15, 2004

"- to synchronise the local files (changed by my colleagues) "
I wanted to say : "to synchronise the developpement server files"

Olivier B
Tuesday, June 15, 2004

Just stop complaining and install it :)

Damian
Tuesday, June 15, 2004

Really, just use it.  While a small shop can often get by with just sharing files, CVS or any other version control system provides additional value by being able to track changes and roll back to previous versions.  Yes, when I was in a 2-3 person shop, we didn't use any VC but once we got larger it became indispensible.  Now I couldn't imagine living without it.

GML
Tuesday, June 15, 2004

You could at least use SourceSafe.  It integrates into CF Studio's IDE (or at least it did with the older versions) and is relatively painless.

I use it, but I'm the only developer, so I only get conflicts with myself.

Steve Barbour
Tuesday, June 15, 2004

CVS is command line software.

I work in VS .NET. I simply can't imagine going to the command line and doing something there.

Doing so would slow down my development.

Maybe for large shops it's worth it.

Nick
Tuesday, June 15, 2004

SourceSafe is command line software, too.

Oh, wait, there's a GUI you say? For CVS, too, dumb ass. :-p

Brad Wilson (dotnetguy.techieswithcats.com)
Tuesday, June 15, 2004

we have a similar scenario as the OP. a web shop, 2 developers, a production server (Novell), a backup/test server (Novell), a networked drive (Win2K) which holds backups, and our 2 personal dev machines. i would like to use VC, but don't even know where I could install it to be most useful. does Novell even run CVS? the servers/network drive are controlled by the server group so they're hard to get anything on without an act of congress.

we're supposed to "checkout" files from networked drive, work locally, upload and test on backup server, save back to network, upload to prod. in practice we just edit everywhere. to complicate matters, the "test" server is also a backup server, meaning it mirrors the prod and all files are overwritten every night. it's a nightmare. any ideas?

josheli
Tuesday, June 15, 2004

I highly recommend "Pragmatic Version Control" from  http://www.pragmaticprogrammer.com/.

They specifically cover CVS but a lot fo the principles apply to other version control software.

The book isn't just a rehash of the CVS manual. They talk about effectively using CVS in a project with several people and branches, etc.

Todd MacCulloch
Tuesday, June 15, 2004

I've worked in several small web shops which couldn't get their heads around version control and fought it for one reason or another.  My colleague works at one and it's the same story.

Your process will fail.  The question is when.

Sassy
Tuesday, June 15, 2004

A few thoughts and suggestions.

1. Use Subversion, not CVS.  See http://subversion.tigris.org for more info; basically, Subversion is intended to be a "CVS-killer".  Faster, better, stronger, you know the story :).

2. As an interim solution, keep the website code on the development server and use a scheduled job (e.g. "cron") to automatically perform a check-in daily.  This way you can keep used the shared workspace, but also get the benefits of version control.  (Caveat: I've not tried this personally.)

3. If the images are large and/or tend to change frequently (you determine what 'large' and 'frequently' mean), don't store them in version control.  But do, of course, keep backups.

4. One of the intangible, but important, aspects of working without version control is there is always the lurking worry in the back of your head that you're going to screw something up and create a problem which will take time and effort to correct.  With version control, you can rest assured that no matter how bad you mess up, you can always go back to a known state.  Consider the benefit of having that peace of mind.

Oh, and let us know if you decide to implement something and how it turns out.

Should be working
Tuesday, June 15, 2004


If you think CVS is purely a comman-line tool, you haven't been paying attention for the past 5+ years.

There are lots and lots of clients.  I like Guntspud as it's open source, Java-based (I can use a single install on all my machines via a samba share), and it's relatively active.  It also works with CVS and lots of the other version control systems.

KC
Tuesday, June 15, 2004

thanks for these answers

I will try asap cvs and/or subversion

It seems complicated...

what kind of architecture do you think is the best ?
- CVS server + developpement context + cvs client on my computer ?
- each on a separate computer ?
- ... ?

Olivier B
Tuesday, June 15, 2004

http://www.tortoisecvs.org/ is another win32 client for cvs that integrates with the win32 shell (IE windows explorer). It works well for me.

I'm not gonna say cvs is the best source control ever but it is free and it does work. If I had my druthers and unlimited $ for licenses I'd use perforce or vault.

trollbooth
Tuesday, June 15, 2004

I would recommend having the CVS server itself on a separate computer, especially if multiple people are using the repository.

We had a setup for a while where the source code repository and the daily build were done on the same box; while the build was running accessing the repository slowed to a crawl. This was with sourcesafe rather than CVS, but I think that the general case holds.

Each developer's box needs a CVS client, plus whatever they need to develop. Ideally everyone should have a sandbox that they can work in privately: compilers, database server, web server, etc.

At home, it's just me, and I have all this stuff (CVS server, IIS, SQL, etc.) all one one box and it works fine.

Chris Tavares
Tuesday, June 15, 2004

I'm a one-man shop, essentially.  I started using CVS a few years ago just for my own peace of mind.  I manage over 10-15 projects that all have the same base code and then are all each heavily customized.  I used to manage that base code just by copying it around for project to project -- as you can imagine, it didn't take long for things to get messy and work to be lost.

My configuration is pretty simple.  I have a single dedicated Linux box (an old old PC) that runs the CVS server and holds the repository.  On all my desktop machines, I run the TortoiseCVS client.  This client integrates into Windows Explorer and you can checkin/update entire directory trees just by right-clicking on them.

If you didn't want to change much, you could just make your development server the CVS workspace.  This means that you are losing the main benefit of CVS (that nobody can overwrite each others work) BUT you can do checkin/checkout so you have backup and rollback abilities.  Then you just leave everything the same.

A more advanced configuration would be to allow your production server access to your CVS server.  That way, instead of FTPing files to update the production server you just use CVS to update your production server with whatever has been commited in development.  This process can also work the other way, if you've changed a file in production, you can commit it and then update development with it.  This also allows you to commit a working configuration and then keep working.  You can update production with that committed configuration anytime after that -- even if you've changed files in development since then.

One step further, is to have every developer have a complete local copy.  Whenever they make changes they want to commit, they commit them.  Whenever they want to download everyone elses changes, they update.  This way, nobody will ever overwrite someone elses work.

CVS isn't great for handling binary files, like images (it'll do it without problems -- but it keeps a complete copy for each change).  Subversion has much better support for binary files -- it stores only differences.

Almost Anonymous
Tuesday, June 15, 2004

A CVS server with the latest version of eclipse 3.0 works really well.  I have my CVS server offsite and access using SSH.  This gives me an automatic backup of my code (and other files as well).  Most CVS clients (WinCVS, Tortoise, Eclipse) all support SSH.

If you need a offsite CVS host, might want to consider http://cvsdude.org.  Prices seem pretty reasonable, but I have never tried it.  Most Linux ISP's with SSH access should be able to host CVS repositories as well.

Cliff

Cliff Brake
Tuesday, June 15, 2004

With regard to Subversion, keep in mind that it uses *more* local disk space than CVS does, because it keeps "pristine" copies of the checked out files, as well as your locally modified versions.

This makes lots of operations much faster than they are with CVS, but the OP mentioned disk space as a concern.

Phillip J. Eby
Tuesday, June 15, 2004

"When I try to imagine how to install CVS, I see :
- it needs that everybody has a local copy of the files (hard disk space !!! beacause we also have lots of pictures)"

Maybe it's time to get those static images into their own directory, away from the source.

"- it needs that everybody has the server context on his station (or a dedicated computer, $$$)"

Everybody doesn't have their own computer?  Why do you work there when the price of a computer is less then the desk it sits on.

"- I know I have to use cvs alone for a while to prove myself and the others that (if ?) it's usefull"

Start with a good book on CVS.  Searching Amazon got a few hits that look promising.

5v3n
Tuesday, June 15, 2004

> I like Guntspud as it's open source...

No such thing.  Is that a typo?

ed
Tuesday, June 15, 2004

STOP EVERYTHING YOU ARE DOING AND INSTALL A VERSION CONTROL SYSTEM. 

Big images?  Unless you have a multi-terabyte archive there is no problem.  Even then Subversion supports binary diffs, so still isn't that big of a problem.  How much do SATA drives cost as a percentage of your time?   

I just finished a major code refactor.  There is NO WAY this could have be done without version control. 

Just go buy a server with a big fat RAID system.  The $3k you speed will be the best thing you've ever done for your business. 

I use Subversion.  It works.  It is free.  Install it, use it.  Perforce is also good, but expensive, and more complicated.  I say it isn't a good first version control system.

christopher baus (www.baus.net)
Tuesday, June 15, 2004

"Everybody doesn't have their own computer?  Why do you work there when the price of a computer is less then the desk it sits on."

sure everybody has their own computer, the problem is that on each computer i have to install and configure IIS (ok) but... coldfusion... $7 000 the licence ! and what about sql server ?

And a computer that runs coldfusion + sql server + an ide + some firefox/iexplore windows + photshop (yes the fancy graphics :) + ... is maybe a big 2 pentium4 cpus with 2 GB of ram... but be sure i'll try...


I have a suggestion :
what about the following configuration :
- sql + coldfusion on the developpement server
- the cvs server on another computer (or the server)
- the dedicated space for each developper... directly on the developpement server

I mean that instead of using an instance of coldfusion on each developper's computer, we just use a directory on the developpement server, IIS configuration done to allow something like 127.0.01:80 is the official developpement server access, 127.0.0.1:81 is the way to access the web files for the first developper, :82 for the other...
on the hard disk, "d:\devserver" is the root for :80,  "d:\developper1" is the root for :81 ...
And each developper use CVS to update from the repository to the d:\developper# of the server using windows file sharing system ?
sounds crazy ?

Olivier B
Tuesday, June 15, 2004

It doesn't sound crazy to me!

I'd make one change -- use virtual hosting on your development machine.  Give each developer their own development-box virtual host.  So they would access their "local" copy by browsing to (for example):

http://olivier.devbox/
http://wayne.devbox/

Give each developer their own named share / directory on the server and map the virtual domain to that directory.  Then just put those host names in the hosts file on each developers machine.

Almost Anonymous
Tuesday, June 15, 2004

ok, I tried...

I installed CVSnt on a dedicated computer
I installed tortoiseCVS on both the developement server and my computer.
I created a repository on the cvs server and add the dev server files in it (using tortoise)
It worked... quite bad : I had error adding some files (no idea why... an example :
D:\server\ma_interne\exemples\xpand-rally\forum\templates\subSilver\images\lang_french\new
couldn't be inserted...

Then... I created a new folder on the dev server to use as the "local directory"... the directory where I checkout the files to work on... and tortoiseCVS show its limitations : it seems that he can't handle directories on network drives...

grrrr

Olivier B
Wednesday, June 16, 2004

For big operations, you might want to consider using WinCVS.  The main Windows CVS client.  Tortiose is more good for day-to-day operations.  And, if it doesn't work on network drives, then it useful for you anyway!

Almost Anonymous
Thursday, June 17, 2004

ok, everything seems to works quite well... but...

it's really slow to update/commit files in a 3 000 files project, even if only 10 have changed between two updates/commit.

I finaly was ok to try the "each developper has he's own developement box" but I don't know how to make a good synchro between the dev server and the boxes. I explain :
To reduce the number of files in the repository I only included the source files (.cfm, .php, .html)... but as I said, the site aslo uses images, lots of images... I need to copy them manually or to create a batch or another special tool ton make a good synchro... it seems really difficult.

I'm trying wincvs, I will inform you ...

Olivier B
Monday, June 21, 2004

TortoiseCVS has a checkbox in its options dialog to enable it for network drives. It's off by default because scanning network drives to see if they contain CVS files can be slow. See also http://www.tortoisecvs.org/faq.html

The java CVS client referred to above is called gruntspud, not guntspud.

Good luck with your efforts.

Hannes
Monday, June 21, 2004

To the TortoiseCVS user having problems checking out to a nework share, you can enable this feature in TortoiseCVS's menu: Preferences -> Policy.

Boris Smus
Wednesday, July 21, 2004

Next time I will read the replies.

Boris Smus
Wednesday, July 21, 2004

*  Recent Topics

*  Fog Creek Home