65

我是一名 WordPress 设计师/开发人员,他越来越多地参与使用版本控制,尤其是 Git,尽管我确实在某些项目中使用 SVN。我目前正在为我的远程仓库使用 Beanstalk。

将所有 WordPress 文件添加到我的 repo 没有问题,如果我想知道我可以 .gitignore wp-config 文件,但由于我是目前唯一的开发人员,而且这些项目是闭源的,它确实使意义不大。

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

这样做有公认的做法吗?

4

5 回答 5

21

您可以在 git 存储库中备份数据库。当然,如果你将数据以二进制形式放入 git 中,你将失去 git 使用差异(更改)有效存储数据的所有能力。所以第一个最佳实践是:以文本序列化格式存储数据。

mysqldump 是一个合适的程序来帮助你做到这一点。虽然它并不完美。如果有任何东西扰乱了项目的序列化顺序(例如,由于创建新表等),那么人为的中断将进入差异。这会降低存储效率。您可以编写一个自定义序列化程序来仅序列化更改 - 但是您正在做 git 已经擅长的艰苦工作。只需使用 sql 转储。

话虽如此,您想要做的并不是开发人员在谈论将数据库放入 git 时通常所说的意思。例如,如果您阅读 @eggyal 发布的链接(链接到 codinghorror),您会看到实际放置在 git 中的是生成初始数据库所需的脚本。可能还有其他脚本,例如用干净状态填充数据库数据或用测试数据填充数据库数据的脚本。所有此类 sql 脚本都是文本文件,并且与您从 mysqldump 获得的 sql 转储格式几乎相同。因此,您也没有理由不能以这种方式处理您的日常数据。

于 2012-12-03T18:42:13.227 回答
9

可用于版本控制数据库(如 MySQL 和 MongoDB)的软件并不多。

但其中一个正在开发中,测试版即将推出。查看Klonio - 数据库的版本控制

于 2014-07-13T03:18:45.110 回答
6

文章如何使用版本控制同步本地和远程 WordPress 博客提供了有关如何使用 Mercurial 在 WordPress 博客的两个实例(开发、生产)之间自动同步的建议。提到对于这种情况,Git 和 Mercurial 非常相似。

第 4 步(同步数据库)在这里很重要。

数据库内容将导出到由修订控制跟踪的文件。每次我们拉取更改时,数据库内容都会被这个文件替换,从而使我们的数据库保持最新。

然后,它详细说明了冲突和工作的脚本部分。

Mercurial中有一个版本控制教程,如果你不熟悉的话。

于 2013-06-26T13:38:33.117 回答
1

如果您只对版本控制下的架构更改感兴趣,那么有一个很好的东西SqlRog。它将模式提取到可以放在 git 下的项目文件中。

于 2021-05-11T17:25:51.717 回答
0

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

于 2014-11-24T15:06:52.570 回答