मान लें कि आपके पास पहले से ही एक गिट रेपो है, शेल स्क्रिप्ट में या जो कुछ भी करें:
#!/bin/bash -e
# -e means exit if any command fails
DBHOST=dbhost.yourdomain.com
DBUSER=dbuser
DBPASS=dbpass # do this in a more secure fashion
DBNAME=dbname
GITREPO=/path/to/git/repo
cd $GITREPO
mysqldump -h $DBHOST -u $DBUSER -p$DBPASS -d $DBNAME > $GITREPO/schema.sql # the -d flag means "no data"
git add schema.sql
git commit -m "$DBNAME schema version $(`date`)"
git push # assuming you have a remote to push to
फिर इस स्क्रिप्ट को दैनिक आधार पर क्रॉन जॉब से शुरू करें या आपके पास क्या है।
संपादित करें:एक स्क्रिप्ट को $gitdir/hooks/pre . में रखकर -commit (नाम महत्वपूर्ण है), स्क्रिप्ट को हर कमिट से पहले निष्पादित किया जाएगा। इस तरह प्रत्येक प्रतिबद्धता के लिए डीबी स्कीमा की स्थिति पर कब्जा कर लिया जाता है, जो समझ में आता है। यदि आप हर बार प्रतिबद्ध होने पर इस sql स्क्रिप्ट को स्वचालित रूप से चलाते हैं, तो आप अपने डेटाबेस को उड़ा देंगे, जिसका कोई मतलब नहीं है।
#!/bin/sh
यह पंक्ति निर्दिष्ट करती है कि यह एक शेल स्क्रिप्ट है।
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
यह ऊपर मेरे उत्तर जैसा ही है; केवल डेटाबेस से डीडीएल लेना और उसे एक फाइल में संग्रहित करना।
git add SQLVersionControl/vc.sql
यह SQL फ़ाइल को आपके रिपॉजिटरी में की गई प्रत्येक प्रतिबद्धता में जोड़ता है।
exit 0
यह सफलता के साथ स्क्रिप्ट से बाहर निकलता है। यह संभवतः खतरनाक है। अगर mysqldump
या git add
विफल रहता है, आप कुछ ऐसा उड़ा सकते हैं जिसे आप रखना चाहते हैं।