Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 数据库版本控制-分支切换如何工作?_Version Control_Database Versioning_Svn Switch - Fatal编程技术网

Version control 数据库版本控制-分支切换如何工作?

Version control 数据库版本控制-分支切换如何工作?,version-control,database-versioning,svn-switch,Version Control,Database Versioning,Svn Switch,对于那些在开发团队中开发的人来说,这是一个问题,你们所有人都有单独的数据库。您正在使用源代码管理和其他工具对数据库进行版本控制,这些工具将自动将dev数据库更新为数据库的最新版本(架构、数据、SP、函数等) 好的,太好了!但是等等!如果您正在开发4.0版的软件,但现在需要将分支切换到3.2分支以修复错误,该怎么办?到目前为止,模式可能(几乎可以肯定)非常不同 我想,如果您花了额外的精力编写回滚脚本和更改脚本,这可能会奏效。但这似乎需要做很多工作——真的值得吗?更简单的方法是创建一个新的3.2分支

对于那些在开发团队中开发的人来说,这是一个问题,你们所有人都有单独的数据库。您正在使用源代码管理和其他工具对数据库进行版本控制,这些工具将自动将dev数据库更新为数据库的最新版本(架构、数据、SP、函数等)

好的,太好了!但是等等!如果您正在开发4.0版的软件,但现在需要将分支切换到3.2分支以修复错误,该怎么办?到目前为止,模式可能(几乎可以肯定)非常不同


我想,如果您花了额外的精力编写回滚脚本和更改脚本,这可能会奏效。但这似乎需要做很多工作——真的值得吗?

更简单的方法是创建一个新的3.2分支数据库,并在处理3.2分支代码时使用它。对我来说,要求每个开发人员只使用一个数据库似乎是不合理的。

创建一个新的3.2分支数据库并在处理3.2分支代码时使用它更容易。对我来说,要求每个开发人员只使用一个数据库似乎是不合理的。

我要冒险,假设您将数据库的版本控制为二进制?如果您的所有数据库资产都是构造性代码(例如SQL脚本和/或文本数据转储)的形式,那么解决方案将很简单,正如Mark所建议的那样:将这些资产存储为开发分支的一部分。要在版本3.2上工作,请切换分支,重新运行create脚本和presto,3.2数据库。合并和使用常规代码一样容易(或者同样痛苦,取决于您选择的版本控制系统)

以下是在此模式下工作的一些建议:

  • 如果从文本创建数据库实例的速度太慢,请在共享磁盘卷上创建一个缓存,由所有架构/数据文件(或其MD5总和)的内容进行键控
  • 编写预提交钩子以确保开发人员实例中的模式和数据转储与版本控制下的模式和数据转储相同。这可以防止人们使用交互式工具对其dev数据库进行更改,然后忘记提交这些更改
  • 你提到变更脚本;将它们视为一种负担。虽然您的部署场景可能需要它们(例如,对于希望就地升级的客户),但它们会从数据库的版本历史记录中复制信息,而且按照墨菲定律,复制意味着迟早会取消同步。尝试使用“diff”从版本化数据库资产自动生成更改脚本;或者,如果无法实现这一点,则将一些严肃的单元测试用于数据库升级

我冒险假设您正在以二进制文件的形式对数据库进行版本控制?如果您的所有数据库资产都是构造性代码(例如SQL脚本和/或文本数据转储)的形式,那么解决方案将很简单,正如Mark所建议的那样:将这些资产存储为开发分支的一部分。要在版本3.2上工作,请切换分支,重新运行create脚本和presto,3.2数据库。合并和使用常规代码一样容易(或者同样痛苦,取决于您选择的版本控制系统)

以下是在此模式下工作的一些建议:

  • 如果从文本创建数据库实例的速度太慢,请在共享磁盘卷上创建一个缓存,由所有架构/数据文件(或其MD5总和)的内容进行键控
  • 编写预提交钩子以确保开发人员实例中的模式和数据转储与版本控制下的模式和数据转储相同。这可以防止人们使用交互式工具对其dev数据库进行更改,然后忘记提交这些更改
  • 你提到变更脚本;将它们视为一种负担。虽然您的部署场景可能需要它们(例如,对于希望就地升级的客户),但它们会从数据库的版本历史记录中复制信息,而且按照墨菲定律,复制意味着迟早会取消同步。尝试使用“diff”从版本化数据库资产自动生成更改脚本;或者,如果无法实现这一点,则将一些严肃的单元测试用于数据库升级