views:

39

answers:

2

We are developing a large software project which consists of a large number of projects, components and libraries. Our management has decided that for every deployment a snapshot of the entire system has to be saved so when a problem arises we can easily have the exact version of the entire system. The usual solution would be to branch the project after each deployment. And by the way, we are using VS2008, C# and SVN. But this is not practical beacase of the large number of sub-projects and libraries which also have their versions and are modified.

One answer to this problem is to have backwards compatibility and always fix problems on the trunk version, but in our case it would not be possible to test the changes of the system ( the software is an ITS system and once a system is deployed we can't do any more intergration testing).

And to make matters worse, out deploments are modular, so each time a different combinations of components is deployes and there is also the localization.

How are you resolving these kinds of problems? Are there any tools that can help?

A: 

I used to work on such project.

We used to branch each release candidates and report bugfixes applied to the RC branch onto the trunk. That was not really handy, but we could not find a decent alternative until we decided to split the projet into a lot of small and cute projects managed by a maven-like system.

Maybe using some continuous integration management tool associated to strong testing routines could help, too.

OMG_peanuts
+1  A: 

You could use a dependency management system like ivy - this essentially keeps a record of every version of every dll you are using.

As a (very) brief overview, when you do a build (using nant, for example), you can hook in ivy to resolve all of the dependencies, getting the specific versions of dlls that you need. As the ivy config will be in svn, if you get out an older revision of your code, you also get out an older version of the ivy config.

David_001
Can this be used with SVN? Can Ivy fetch a specific version of the dependandcy from the SVN?
rusbi
Yes, but normally ivy will not retrieve things from svn, you'd have an ivy repository - like a shared location where dlls are stored. For example, log4net might be a dependency (not in svn), but is in the Ivy repository at X:\ivy\log4net\v1.2.10\... etc. The version numbers are stored in the ivy config for your project, so when you get an older version of your code, you also get an older version of the ivy config. When ivy resolves the dependencies it can therefore get the exact versions of dlls that were needed.
David_001