如果建议这样做?
我可以问一些有关如何跟踪mysql模式版本的git命令示例吗?
我们是否应该使用通常在应用程序根目录上使用的另一个存储库?
我应该使用一种叫做钩子的东西吗?
更新:
1) 我们导航到.git数据库所在的项目根目录。
2) 我们创建一个名为hooks的子文件夹。
3) 我们将类似以下内容放入名为db-commit的文件中:
#!/bin/sh mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql git add SQLVersionControl/vc.sql exit 0
现在我们可以:
4) git commit -m
git commit -m
该提交将包括刚提交前已运行的mysql模式转储。
以上内容的来源在这里:http : //edmondscommerce.github.io/git/using- git-to-track-db-schema-changes-with-git- hook.html
如果这样做是可以接受的方式,我可以请耐心的人逐行并尽可能详细地评论一下,这是怎么回事:
非常感谢。
假设您已经有一个git repo,请在shell脚本中执行以下操作或执行以下操作:
#!/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
然后每天从cron作业或您拥有的内容中启动此脚本。
编辑:通过将脚本放入$ gitdir / hooks / pre- commit (名称很重要)中,该脚本将在每次提交之前执行。这样,每次提交都可以捕获数据库模式的状态,这很有意义。如果您每次提交时都自动运行此sql脚本,则将删除数据库,这没有任何意义。
#!/bin/sh
此行指定它是一个shell脚本。
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
这与我上面的答案相同;仅从数据库中获取DDL并将其存储在文件中。
git add SQLVersionControl/vc.sql
这会将SQL文件添加到对存储库的每次提交中。
exit 0
这将成功退出脚本。这可能很危险。如果mysqldump或git add失败,您可能会吹走想要保留的东西。
mysqldump
git add