有没有一个工具将git diff输出转换为SQL INSERT和DELETE语句?

时间:2012-10-25 02:47:39

标签: mysql wordpress git

我正在开发一个WordPress网站,在我的笔记本电脑上进行开发,然后通过git推送到服务器来部署更改。这适用于文件,我希望对数据库的内容更改做同样的事情。

我解决问题的第一次迭代使用git hooks在提交之前使用mysqldump转储数据库,然后在签出后恢复转储。这可以工作,但每次都会丢弃并重新创建整个数据库。这不行,因为WordPress也会自动对我想保留的数据库进行更改,比如销售哪些产品的记录,所以我不希望整个事情都被删除并恢复每次结账。

我认为更好的解决方案是在提交期间继续转储数据库,然后对于签出使用读取git diff HEAD^输出的新工具并将其转换为INSERT和DELETE SQL语句,将其转换为{{ 1}}。这样,数据库将随着我的更改逐步修补,同时保留其他人(例如WordPress)所做的更改。例如:

git diff:

mysql

转换为SQL:

 (83,NULL,550,'TI-99/4A','',0,0,0,0,'',0,0,0),
-(85,NULL,2000,'Banana Jr. 6000','',0,0,0,0,'',0,0,0),
+(85,NULL,2000,'Banana Jr. 6000 (now with tint control!)','',0,0,0,0,'',0,0,0),
 (88,NULL,150,'Symbolics 3645','',0,0,0,0,'',0,0,0),

我四处搜寻,找不到这样的东西。我正在考虑自己写作。

这样的事情存在吗?这是好主意还是坏主意?

2 个答案:

答案 0 :(得分:0)

据我所知,这种工具不存在。我知道产生类似输出的最佳选择是使用Synchronize Model中的“MySQL Workbench”功能。

也就是说,我建议您在SQL文件中跟踪您在开发数据库中所做的更改,检查git,这可以在您的生产服务器上执行。

答案 1 :(得分:0)

我想到了一种可能的方法:

我将数据库转储到每个表的不同文件中:

wp_commentmeta.sql
wp_comments.sql
wp_links.sql

也许我可以将表格分成内容与簿记类别,例如usr and var directories in Unix之间的区别,并将簿记表添加到我的.gitignore中,这样当我更新时,它们就不会被破坏内容。