> My goal in learning Subversion was to put our web site under version control.
> Now I have my doubts as to whether Subversion can handle it.
> 
> The web site uses Drupal. And Drupal has the characteristic that much of the
> site is contained in a MySQL database. For example, if I install a module and
> set it up, the module is a disk file, but the configuration of that module is 
> in
> the database. If I make a change, part of the change may be in a PHP code
> file on disk, part may be in the database.
> The database contains both user data and configuration data, intermingled.
> 
> I could get Subversion to work. I would have a pre-commit script to back up
> the database to a disk file in the working copy. I would have a post-checkout
> script to reload the database from the disk file. Along with svn commit and
> svn checkout, this would give us the ability to roll back to any earlier 
> version.
> 
> What I can not imagine is how to get more than one person to be able to
> work on the site. Yes, Subversion would be able to merge changes to the disk
> files. But I don't see how Subversion can handle merging changes to the
> database. The MySQL database is text; perhaps someone here as experience
> with that. Can MySQL backup files be merged?

Versioning database schema changes and data changes is a challenge but not 
impossible. 

BTW: svn does control binaries but not as well as text files.

There are tools to do db migrations where the migrations are scripts that 
modify your database. You source control the migration scripts and then your 
build/deploy process can run these migration scripts. Basically, it inspects 
the current "version" of the database and runs the appropriate scripts. If you 
really want to get fancy your scripts can migrate UP or DOWN version too... but 
usually not necessary to go down version in production. 

You can also dump your database and put that in source control for dev. This 
way you can recover to any "version" but just loading up that dump. 

We use a tool called DBGhost. It is for SQL Server only but it has a sync 
engine that will build the database from the source scripts and then compare 
that to the current live database and make the needed changes. It supports 
schema and data changes. It also allows you to control data changes by columns, 
so for example you can have a column in a table that specifies if the rows are 
"shipped" rows or customer rows and have it not touch the customer data.

Be creative and I'm sure you can come up with a way to revision your database 
changes. If you google "source control database" you will find lots of ideas 
and hints.

BOb

Reply via email to