Stiamo usando ant + dbdeploy, in passato avevamo utilizzato phing + dbdeploy.
Sfortunatamente non esiste un modo automatico per gestire questo tipo di modifiche, quindi abbiamo dovuto trovare un accordo. I nostri rami sono temporanei, quando la funzionalità / bug viene risolta, di solito vengono rimossi dopo la fusione delle modifiche nel ramo principale. Poche regole di base:
1. Make sure everyone knows you will be or you already have changed database structure and/or
data
This way conflicts are prevented. If Alice on changing something Bob already changed in a different branch, Alice can either use Bob's delta or make sure your change will not affect it.
2. Only one person is allowed to merge changes into master branch
When Charlie is merging branches into master, Alice and Bob help him resolve any DB delta issue. For example, Alice created 123_create_table_user.sql
and Bob 123_alter_table_message.sql
. Depending on the changes, there are two possible outcomes, 123_create_table_user.sql
and 124_alter_table_message.sql
or 123_alter_table_message.sql
and 124_create_table_user.sql
.
3. You are the owner of your local database
In above case, both Alice and Bob need to make sure their dbdeploy's changelog
is in sync. If there are any problems when running dbdeploy because the values in the table are different than the delta scripts, it's Alice's and/or Bob's fault.
Ciò che abbiamo visto finora, le modifiche al database più frequenti sono fatte all'inizio del progetto, quando tutto è fatto su un ramo. In seguito, anche con 5 o più sviluppatori che lavorano ciascuno nelle proprie filiali, raramente si verificano conflitti tra database.