2012-11-28 71 views
52

我是一名WordPress设计师/开发人员,他越来越多地使用版本控制,特别是Git,尽管我在某些项目中使用了SVN。我目前正在使用Beanstalk作为我的远程回购。在MySQL数据库上使用版本控制(Git)

将所有的WordPress文件添加到我的回购中是没有问题的,如果我想知道我可以.gitignore wp-config文件,但是因为我是唯一的开发者,所以当前这些项目都是封闭源码,这确实没有什么意义。

与任何CMS一样,WordPress在很大程度上依赖于数据库来保留文本内容以及许多设置,具体取决于我正在使用的特定插件/主题配置。我想知道在数据库上使用版本控制的最佳方法是什么,如果甚至可能的话。我想我可以做一个SQL转储,虽然我的MySQL服务器在Windows上运行(阅读为:我不知道该怎么做),然后将SQL转储添加到我的存储库。但是当我推动一些生活时,这会带来巨大的安全威胁。

有没有一个公认的做法呢?

+0

我转储数据库并将其检入版本控制。但我不会推送到Wordpress项目上的服务器(git并不总是可用于共享主机)。所以通常我通过FTP手动上传,就像那样糟糕。在使用git进行部署时有兴趣听到一些正确的做法。 –

+0

此外,您可以将数据库检入到'develop'分支,并使用[这里](http://stackoverflow.com/a/8014154/551093)技术来排除数据库被合并到'master'中。然后只从'master'部署。理论上,这应该起作用。 –

+0

我为“WordPress的版本控制”做了一个快速的谷歌,并找到了这个WordPress的插件列表:http://wordpress.org/extend/plugins/tags/version-control他们中的任何一个会有用吗? –

回答

18

你可以在git仓库中备份你的数据库。当然,如果你把数据放入二进制形式的git中,你将失去所有git使用差异(变化)有效存储数据的能力。所以最好的做法是:将数据以文本序列化格式存储。

mysqldump是一个合适的程序来帮助你做到这一点。尽管如此,它并不完美。如果有什么干扰项目的序列化顺序(例如,由于创建新表格等),那么人为的中断将进入diff。这会降低存储效率。你可以编写一个自定义的串行器来只改变序列化,但是你正在做git已经很擅长的努力工作。只需使用SQL转储。

这就是说,你想要做的不是什么开发人员通常意味着当他们谈论把数据库放在git中。例如,如果您阅读@eggyal(link to codinghorror)发布的链接,您会看到实际放置在git中的是生成初始数据库所需的脚本。可能会有其他脚本,比如那些用干净状态填充数据库数据,或者用测试数据填充数据库的数据。所有这些sql脚本都是文本文件,与您从mysqldump获得的sql转储格式几乎相同。所以没有理由不能用你的日常数据这样做。

+9

对于大多数企业应用程序来说,在版本控制下放置生成数据库所需的脚本就是所有这些需要。但对于像WordPress这样的内容管理系统,数据库中的很多内容是有效的代码和配置,而不是最终用户数据。代码和配置需要受版本控制,即使它们作为数据存储在SQL表行中。 WordPress对你而言并不容易。 –

+1

@Catcall我同意。当我说一些sql脚本可能以干净的初始状态填充数据库时,我就是这么说的。如果您想根据某种预先配置的状态快速部署多个WordPress网站,则所描述的策略将非常有效。与所需的插件首选配置等 –

5

文章How to Sync A Local & Remote WordPress Blog Using Version Control给出了如何使用Mercurial自动化WordPress博客的两个实例(开发,制作)之间同步的建议。提到的是,对于这种情况,Git和Mercurial非常相似。

步骤4(同步数据库)在这里很有用。

数据库内容将被导出到由修订控件跟踪的文件。每次我们进行更改时,数据库内容都将被此文件替换,从而使我们的数据库保持最新状态。

然后,它详细阐述了冲突和作业的脚本部分。

有一个version control tutorial in Mercurial在那里,如果你不熟悉它。

0

请注意,Wordpress会将所有新闻提要内容存储在数据库中,因此即使您未做任何更改,也会有很多不断变化的内容。

+0

自动提交呢? –