2

在 SVN 中,我们有一个项目,该项目具有使用休眠等的所有数据库逻辑。但是,该项目取决于处于与代码匹配的特定状态的数据库模式。

同样,我们还将在 Config 目录中运行用于服务器的配置脚本。

如何在 SVN 中正确设置项目结构来克服这一点?

结构可能是这样的:

--DBHibernateProject
------trunk
------branches
------tags
--DatabaseScriptsProject
------trunk
------branches
------tags
--ConfigProject
------trunk
------branches
------tags

但是我们如何将数据库脚本项目绑定到 DBHibernateProject 的 Release-1.0 呢?hibernate 项目在 maven 存储库中有一个可部署的资产(jar),但 db 脚本没有。我想确保正确的数据库脚本与应用程序的正确版本相关联。

4

5 回答 5

2

如果“项目依赖于...”意味着“对于 DBHibernateProject 的每个修订版,我们必须使用 DatabaseScriptsProject 和 ConfigProject 的预定义和固定修订版(它们在 DBHibernateProject 树中使用/引用)”您始终可以使用纯 Subversion 端解决方案:带有 PEG 修订的外部

没有关于源树结构的知识就不能说更多:“依赖”和“也有配置脚本”不能翻译(容易)成正式的依赖,比如(我糟糕的重建)

DBHibernateProject 的每个修订版都必须具有相关的 DatabaseScriptsProject(用于此代码的正确架构)和 ConfigProject(用于生成数据库架构的脚本,由 DBHibernateProject 使用)

如果我的重建是正确的,在 Subversion 样式中(没有 Maven,这可能是我的错误)我将在 DBHibernateProject 树中创建两个目录类型的外部对象,它们分别引用 DatabaseScriptsProject 和 ConfigProject 树中的“某种状态下的某些树”

于 2013-01-24T05:37:27.077 回答
1

您要么通过流程完成,要么制作一个 SVN 项目。

您可以为团队制定一条规则,当您完成一组数据库内容时,您使用与它所使用的代码的标签相同的标签对其进行标记。这可能很乏味,但如果更改通常在数据库和代码之间同步,则这是可行的。

另一种方法是在 SVN 中创建一个带有一个主干和一组标签和分支的项目。然后,您可以通过在存储库的顶层放置一些包含代码、脚本和休眠内容的文件夹来完成同样的事情。可以管理您的 SVN 存储库的权限,以便不同的人对特定文件夹具有写入权限,但这会产生每次分支时不断修改权限的成本(如果您愚蠢地允许修改标签,可能还会添加标签)

于 2013-01-23T21:08:55.403 回答
0
  1. 将我所有的 SQL 脚本保存在 SVN 中
  2. 不允许修改它们(如果要更改某些内容,请创建包含正确 SQL 语句的新 SQL 文件)
  3. 配置maven dbpatch 插件 https://github.com/m-szalik/dbpatch-maven-plugin
于 2014-07-28T00:06:58.493 回答
0

难道你不能有一个看起来像这样的数据库项目的单一项目布局:

----DatabaseProject
-------trunk
--------DBHibernateProject
--------DatabaseScriptsProject
-------branches
-------tags

----OtherProject
-------trunk
-------branches
-------tags

----ConfigProject
-------trunk
-------branches
-------tags

如果配置项目不与其他项目绑定,而只是服务器的脚本,那么我猜你可以将它作为与 OtherProject 相同的布局。

于 2013-01-25T15:12:44.463 回答
0

我强烈建议使用liquibase来管理您的数据库迁移。更改文件是从类路径中读取的,这意味着它们可以与匹配的 Hibernate 类文件一起部署在同一个 jar 中。

我从未使用过它,但 liquibase 确实有一些对休眠的支持,这可能会被证明是有用的。

有关 Maven 示例,请参见:

对于一些更多的理论阅读,我建议:

为了公平起见,在同一功能空间中还有一些其他工具:

于 2013-01-23T23:54:10.537 回答