在我的公司,我们使用液态碱的方式可以防止这些情况的发生。基本上,您可以为每个更改创建一个单独的 liquibase 文件。我们以发起更改的 JIRA 票证命名文件,并带有一些描述性文本。这些文件中的每一个,我们都将它们所在的系统版本放入一个文件夹中;如果下一个版本是1.22,那么当我们开始进行数据库更改时,将创建该文件夹,并将每个lquibase文件与一个更新.xml脚本一起放在那里,该脚本仅包含它们。该更新.xml文件最终成为唯一可能真正发生冲突的地方,并且它们很容易解决。
为了说明,这是文件夹:src/main/liquibase
├── install
│ ├── projectauthor.xml
│ ├── project_obspriorities.xml
│ ├── project_priorities.xml
│ ├── project_udv.xml
│ ├── project.xml
│ ├── roles.xml
│ ├── scan.xml
│ ├── (the other table definitions in the system go here)
│
├── install.xml <-- this reads all the files in ./install
│
├── local.properties <--
├── prod.properties <-- these are database credentials (boo, hiss)
├── staging.properties <--
├── test.properties <--
│
├── update.xml <-- reads each version/master.xml file
│
├── v1.16
│ ├── 2013-06-06_EVL-2240.xml
│ ├── 2013-07-01_EVL-2286-remove-invalid-name-characters.xml
│ ├── 2013-07-02_defer-coauthor-projectauthor-unique-constraint.xml
│ └── master.xml
├── v1.17
│ ├── 2013-07-19_EVL-2295.xml
│ ├── 2013-09-11_EVL-2370_otf-mosaicking.xml
│ └── master.xml
├── v1.18
│ ├── 2014-05-05_EVL-2326-remove-prerequisite-construct.xml
│ ├── 2014-06-03_EVL-2750_fix-p-band-polarizations.xml
│ └── master.xml
安装.xml文件只是一堆文件包含:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
<include file="src/main/liquibase/project/install/projectauthor.xml"/>
<include file="src/main/liquibase/project/install/project_obspriorities.xml"/>
...
</databaseChangeLog>
更新.xml文件是相同的故事:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
<include file="src/main/liquibase/project/v1.18/master.xml"/>
</databaseChangeLog>
我不喜欢的工作流程的一个方面是,install/*.xml应该创建数据库,因为它在当前版本之前,但我们通常不记得这样做。
无论如何,这种方法将使您免于合并的很多悲伤。我们正在使用Subversion,并且这种方法没有任何合并困难。