1

我在我的机器上设置了 MAMP 来开发一些网站内容,并且因为我想以有组织的方式分离我的项目,所以我为每个项目设置了虚拟主机,这是有效的。我在一个目录中为每个项目都有我的网络文件(javascripts、css、html、php),例如/Users/Alex/Dropbox/code/projectX/. 我的 MAMP 目录在其他方面与开箱即用的方式相同;所有 mysql 的东西都在/Applications/MAMP/db. \projectX\已经是一个 git 存储库,但我的 db 文件不受版本控制。

问题:如何对与每个 Web 项目关联的数据库进行版本控制?我脑子里有三种方法,不知道如何实现前两种。我更喜欢第一个,因为它看起来更简单,并且非常适合虚拟主机方案。

a) 将 projectX 的数据库目录移动到\projectX\文件夹中,然后就git add可以了。不过,我不知道如何告诉 MySQL 我这里有这个数据库,那里有那个数据库。

b)不知何故告诉git它也需要版本控制Applications\MAMP\db\mysql\projectXdb,就好像它在里面一样\projectX\

c)不要花哨,只需为数据库建立一个单独的存储库。

4

1 回答 1

2

首先,我会阅读这篇文章和他发布的链接——仅仅是因为它们是一本好书。

简而言之(这就是我可能误解了这个问题的地方),我认为将实际数据库存储到版本控制中并不是最明智的做法。相反,您需要决定一些存储数据库脚本的系统来控制/更改/设置数据库。因此,这些脚本可以绝对存储在代码文件结构中的任何位置。

如果这个想法有效,那么您不必更改实际数据库的位置,并且 git 也不必关心实际数据库的位置。

我建议的一个例子是制作这样的文件:

ALTER TABLE Customer
  ADD ShoeSize int NOT NULL DEFAULT 0
GO

INSERT INTO OrderStates 
   (OrderStateID, OrderState)
   VALUES(3, 'Cancelled')
GO

然后将其存储到某个名为/Users/Alex/Dropbox/code/projectX/db-scripts或其他的目录中。在该目录中将包含随时管理/复制数据库所需的所有脚本。

编辑:

如果软件将所有信息保存在数据库本身中,则可能运行mysqldump(或等效)并将该脚本存储到代码中。

存储文本版本允许两件事:

a)它比存储二进制文件更有效/高效(如果我正确理解 RCS/git)

b) git 可以对文件进行差异和 grep 搜索。(如果已经有另一个工具可以做到这一点,这可能无关紧要)

于 2012-05-01T02:46:19.413 回答