Witam,
Jeśli chodzi o pierwsze pytanie, to kontrola zmian w bazie danych może być osiągnięta przez jakiś mechanizm migracji można to sobie zobaczyć np. w doctrine
http://www.doctrine-project.org/projects/o...l/migrations/en w takim wypadku klasy migracji mogą być przetrzymywane w repozytorium. Jednak to rozwiązanie nie gwarantuje tego że bazy danych są takie same – np. inne dane w bazie produkcyjnej
Jeśli chodzi o drugie pytanie to ja osobiście do deploy-u na serwer produkcyjny używam Capistrano (projekt w ruby)
http://github.com/capistrano/capistrano/wi...umentation-v2.x przystosowanego do deploy-u aplikacji w PHP (przykład:
http://www.jonmaddox.com/2006/08/16/automa...ith-capistrano/ ) . Po skończniu dodawania/poprawiania jakiejś funkcjonalności programista commituje kod. Sewer integracji sprawdza czy w repozytorium na danej gałęzi są jakieś zmiany jeśli są to zaciąga nowy kod, wykonuje potrzebne kroki konfiguracyjne i odpala wszystkie testy w projekcie. Jeśli któryś z testów nie przejdzie programista i „Project Manager” dostają maila, programista musi poprawić kod tak aby testy przeszły. Gdy już przejdą programista tworzy taga i zgłasza to do PM. Aktualizacja nowej wersji następuje poprzez capistrano (można sobie skonfigurować czy przez update czy export, ja prefereuje export) i to capistrano dba o to iż w razie jakiś niepowodzeń w czasie deploy-u (jakieś błędy przy migracjach lub skrypty które wykonały się z błędem) przywracana jest poprzednia wersja.
Pozdrawiam l3l0