4

I do website development (primarily Drupal base sites) and have a workflow with:

  1. many developers working on their Local machines
  2. developers use git to merge their changes on a Development machine
  3. when the dev site hits a stable point, we push to a Staging server for the client to review
  4. and finally we make releases to the Production server

And git is moving the files nicely back and forth. My question is how do I one-up this and use git to migrate the database along with the files?

And once I am able to move dev databases up the ladder, how do I merge development databases with the active production database?

doub1ejack
  • 10,627
  • 20
  • 66
  • 125
  • which changes to the databases are done during the way?.. This problem field is generally known as "db migration", and solved by appropriate tools. If your realm is PHP, than you could probably look at `DBDeploy` – spacediver Jul 19 '12 at 21:03
  • If there is not only throw-away test content in the tables, but some valuable content involved, then things complicate a bit, so you must store versioned valuable content insertions as well as db schema modifications – spacediver Jul 19 '12 at 21:05

1 Answers1

1

Most straightforward thing to start with is to just dump the database into one file and store it in the git as well as the sources. But be sure not to leak this file into the production webroot, so that some schema.sql is not easily available by HTTP. It's convenient to store sources at /webroot and db at /db subdirectories of your repository, making the /webroot actual root of web server.

You'll then see some updates and merges, and even conflicts around this file -- these should be resolved as usual you do to your code files.

After all merges and conflict resolutions of both schema code and executable code you should thoroughly test your application end-to-end.

spacediver
  • 1,483
  • 1
  • 11
  • 18