Some explanation...
This is how I
think it should work (or at least, how I think I'd
like it to work)
DEV
Multiple developers all pulling/pushing from a shared Git repo (or from each other, if necessary, as the Git model permits). These developers all share the same DB, per project. When the developers are happy with their work, they push to the central Git repo. The DEV site auto-updates with each push to the repo (snippets/chunks/templates/packages etc). This is what we were doing further up the thread with BitBucket. Nice.
Nobody actually takes any notice of the DEV site until all developers have completed their work. All development happens on each developers local machine. An appropriate .gitignore file is obviously setup to ensure config files are not overwritten, etc.
Once everyone has pushed their changes, and everyone is happy with the DEV site, it's ready to go to the next stage...
STAGING
Developers do not have direct access to the STAGING Git repo/branch. This is pushed to from the DEV repo itself by an admin. Developers can
only ever access the DEV repo, therefore protecting the STAGING and LIVE sites and enforcing tiered deployment.
At the same time as pushing to the STAGING repo, a SQL Compare tool is used to sync any new DB records to the STAGING DB. This is a "selective" sync, so only DB records for snippets/chunks/templates/packages etc are pushed. Users/resources or any other "content" is not (because that staging site may well already have different content compared to the DEV site. The same applied further up the ladder).
There are a few SQL Compare/Sync tools available, such as
http://www.red-gate.com/products/mysql/mysql-comparison-bundle/ or
http://www.mysql.com/products/workbench/. Whilst this requires a human eye, it should be a relatively trivial task and just requires some understanding of what should/shouldn't be pushed DB-wise.
The STAGING site is now available for your client to review.
LIVE
Once the client is happy with the site, the processes is effectively repeated. An admin pushes changes from the STAGING repo/branch to the LIVE repo/branch and the DB sync is carried out again.
The site updates are now available to the public and considered LIVE.
This whole process just repeats and repeats with each major update. Developers push their changes to the DEV site for "internal" review, this is then pushed to the STAGING site, which is then pushed to the LIVE site.