Branch individual MySQL Database

19 views
Skip to first unread message

Forte

unread,
Dec 12, 2011, 11:23:04 AM12/12/11
to ecam...@googlegroups.com
Hi zusammen

Da es sehr lästig ist, wenn man nach jedem checkout die MySQL Datenbank anpassen muss, hatten wir versucht dies zu umgehen.
Der erste Versuch basiert darauf, die Files der MySQL Datanbank via Symbolic Link mit in den Source aufzunehmen.

Einige mussten schmerzhaft erfahren, dass das scheinbar eine nicht so tolle Idee war... 
(Bis dahingehend, dass es die MySQL Datenbank abgeschossen hat.)


Ich habe mit in der Zwischenzeit einmal schlau gemacht und folgenden Post gefunden:



Die Idee:

Git erlaubt es auf verschiedene Events zu reagieren. Man kann dazu sogenannte Hooks implementieren. Im oben angegebenen Beispiel wird auf das Event "Pre-Commit" ein Hook implementiert, welche den aktuellen stand der MySQL Datenbank in ein File Dumped. Dieses File wird der Commit angehängt und mit Commited.
So enthält der Commit den aktuellen Stand der Datenbank.

Ein weiteres Event, welches verwendet werden kann, ist das "Post-Checkout" Event. Bei diesem kann man nun die gedumpten Daten in die MySQL Datenbank laden. So ist nach einem Checkout die Datenbank auf dem Stand, in welchem diese Committed wurde.



Ich habe diese Implementiert. Da Git aber die Hooks nicht ins Repository aufnimmt, muss diese jeder selber hinzufügen. Das ist sogar gut so, da diese angepasst werden müssen.
Der /.git ordner liegt im GIT Repository und somit auf der gleichen Stufe, wie zum Beispiel /application oder /library und /public.
Zudem müsst ihr sicherstellen, dass die angelegten Dateien ausführbar sind.
(sudo chmod 755 .git/hooks/pre-commit)


Pre-Commit - File:  [/.git/hooks/pre-commit]
(Du musst den Pfad zum binary "mysqldump", sowie DBUSER, DBPASS und DB anpassen.)
(SCHEMAPATH solltest du lassen, dieser zeigt in den Source)

#!/bin/bash
DBUSER="root"
DBPASS="root"
DB="eCamp3dev"
SCHEMAPATH="data/sql" 
 
if [ ! -d $SCHEMAPATH ]; then
mkdir -p $SCHEMAPATH
fi 
 
/Applications/MAMP/Library/bin/mysqldump -u $DBUSER -p$DBPASS $DB > $SCHEMAPATH/$DB.sql
git add $SCHEMAPATH/$DB.sql



Post-Checkout - File:  [/.git/hooks/post-checkout]
(Du musst den Pfad zum binary "mysql", sowie DBUSER, DBPASS und DB anpassen.)
(SCHEMAPATH solltest du lassen, dieser zeigt in den Source)

#!/bin/bash
DBUSER="root"
DBPASS="root"
DB="eCamp3dev"
SCHEMAPATH="data/sql" 
 
if [ -a $SCHEMAPATH/$DB.sql ];
then
/Applications/MAMP/Library/bin/mysql -u $DBUSER -p$DBPASS $DB < $SCHEMAPATH/$DB.sql
fi

 
Viel Spass.
Reply all
Reply to author
Forward
0 new messages