【问题标题】:How to use git as source control provider for SQL Server Management Studio [closed]如何使用 git 作为 SQL Server Management Studio 的源代码控制提供程序 [关闭]
【发布时间】:2011-04-17 03:24:47
【问题描述】:

我们可以使用 GIT 作为 sql management studio 的源代码控制吗?

【问题讨论】:

  • 不了解 git,但我们使用 VisualSVN 进行源代码控制 SQL Server 脚本。
  • 你最后做了什么?跟踪 .sql 文件似乎很简单,无论是在 SMSS 还是 MSVS 中,但是解决方案和项目文件呢?
  • @tggagne 目前我所做的是,我在文件系统上跟踪旧的和新的 sql 脚本,并使用 GIT 跟踪这些文件。我希望这是在 MS SQL management Studio 上执行此操作的更好方法。我很惊讶微软没有提供这个。我相信每个人都会更容易,如果他们有能力在 MS Sql 管理工作室自己跟踪存储过程和视图或函数的变化。
  • 有人注意到使用 SSMS 的默认编码 UTF-16 不会让你使用 git diffs?
  • 多年来,我们一直在使用 red-gate 的第三方产品。它确实将有限的 git 集成到管理工作室中。例如,受限制,您不能轻易地提交 sql 更改以及其他代码更改。此外,它似乎在较大的数据库上显着减慢。见:red-gate.com/products/sql-development/sql-source-control

标签: sql-server git ssms


【解决方案1】:

用于 SSMS 中的数据库源代码控制

代理 SVN - SCC 颠覆插件。 http://www.zeusedit.com/agent/ssms/ms_ssms.html

http://www.red-gate.com/products/sql-development/sql-source-control/

【讨论】:

    【解决方案2】:

    我发现 ApexSQL 有一个本机支持 Git 作为源代码控制系统的工具。它以 SSMS 插件的形式提供,并提供了一个向导,您可以使用该向导将数据库对象与源代码控制系统进行映射。为此:

    1. 下载安装ApexSQL Source Control
    2. 启动 SSMS 并在对象资源管理器中选择要链接到源代码管理的数据库
    3. 右键单击数据库,并在上下文菜单中,从 ApexSQL Source Control 子菜单中选择 Link database to source control 选项
    4. 选择源代码控制系统(在您的情况下是 Git)并从 2 个数据库开发模型中进行选择 - 共享或专用。当您链接多个开发人员将同时工作的数据库时,建议使用共享模型
    5. 使用源代码管理过滤您不想跟踪的对象:按架构、类型或名称按架构、类型或名称
    6. 提供适当的登录信息和存储库字符串。对于 Git,它是: <protocol>://<hostname>:<portnumber>/<Git server name>/<repository>(见下面的例子):

    可以在本文中找到更详细的分步说明: http://knowledgebase.apexsql.com/link-database-source-control-system-2/

    【讨论】:

      【解决方案3】:

      试试sql-source-control,这是一个免费的开源 CLI,用于将 SQL 导入 Git 等源代码控制系统。

      https://www.npmjs.com/package/sql-source-control

      【讨论】:

      • 这是一个令人印象深刻的举措,但是当索引具有多个属性时,这个包无法使用,因为该错误
      【解决方案4】:

      微软已发布SQL Operations Studio。它是一个运行在 Windows、macOS 和 Linux 上的免费工具,用于管理 SQL Server、Azure SQL 数据库和 Azure SQL 数据仓库;无论他们跑到哪里。它带有native GIT support

      【讨论】:

      • 当前称为 Azure Data Studio。它从 Visual Studio Code 继承其本机 GIT 支持。如果我错了,请纠正我,但它不会直接将您选择的(数据库)存储过程、函数、.. 版本化到 git repo。它正在使用对普通文件的 git 支持。
      • 更正它使用纯文件,它不支持本地数据库版本控制。
      • 我试了一下。它有一个充满希望的未来,通过免费扩展积极开发 FOSS,而 SSMS 附加组件几乎总是昂贵的。不幸的是,对于源代码控制,它比在 SSMS 中生成脚本和在外部使用源代码控制要糟糕得多,就像我现在使用 git-gui 所做的那样。在 ADS 中,无法一次将多个对象导出到单个文件,即使是内置的源代码管理也可以读取它们。每个对象必须作为脚本打开,然后转到资源管理器并右键单击打开的编辑器以另存为文件,然后添加到源代码管理。
      • 截至 2021 年,他们在这方面取得了更多进展,但积压了大量工作。同样,未来充满希望,但 SSMS 的功能还远远不够。
      【解决方案5】:

      您可以将 Git Bash 添加为外部工具(工具 | 外部工具...):

      【讨论】:

      • 或者只是从命令行使用 Git Bash。还不错。
      • 我认为这不会神奇地使 Git 能够像跟踪文件一样跟踪 SQL 对象。你能详细说明这实际上是做什么的吗?
      【解决方案6】:

      由于 SSMS (或多或少)是 Visual Studio 的自定义版本,您或许可以使用适用于 VS 的解决方案:

      Using Git with Visual Studio

      或者,从一开始就在 Visual Studio 中管理您的数据库源代码,而不是在 SSMS 中。这样(至少在 VS2010 中)你就有了数据库项目、集成部署和单元测试等。或者在你准备好时继续使用 SSMS 并从外部工具签入你的代码(当然不是那么方便)。

      但这完全取决于您在做什么:SSMS 是 DBA 工具,VS 是开发人员工具。无论哪种方式,您都应该使用某种形式的源代码控制,但从问题中不清楚您需要对哪种文件进行版本控制。

      【讨论】:

        【解决方案7】:

        还没有,但如果你去http://redgate.uservoice.com/forums/39019-sql-source-control/suggestions/537681-add-git-support 并投票支持redgate 以添加对git 的支持,它可能会在下一个版本中添加。是的,我知道它是一种商业产品,但有些产品足以支付!

        【讨论】:

        • Regate 源代码控制现在支持 git
        【解决方案8】:

        Red Gate SQL 源代码控制已更新,包括 Git 和 Mercurial 支持(以及 Perforce 和 TFS)。请注意,他们的 DVCS 集成相对于他们的 SVN 产品并不是 100% 完整的功能,因为 SSMS 不支持诸如查看对象历史记录等基本功能。如果 SQL 比较等其他 Red Gate 工具是您工作流程的一部分,这可能会破坏交易。

        我们的解决方法是安装 TortoiseGit 或 GitExtensions 并导航到磁盘上的存储库以深入了解细节。它有效,但有点笨拙。

        【讨论】:

          【解决方案9】:

          VersionSQL 是一个 SSMS 源代码控制插件,我设计为轻量级且易于使用。在“对象资源管理器”面板中,只需右键单击数据库或对象,然后单击“提交”。 VersionSQL 会以整齐有序的文件夹结构将其脚本输出到 Git/SVN。

          查看https://www.versionsql.com

          【讨论】:

            【解决方案10】:

            围绕这个问题有很多答案,您可能想看看,但简而言之......

            版本控制的本质是存储原始文件,然后存储增量,原始文件提交和后续更改之间的差异(好吧,我已经做得比它可能更简单了),然后管理版本编号并提供工具来提取您需要的任何特定修订。这也允许您比较以前的修订并回滚(等等)

            RDBMS 由架构和这些更改的数据组成,并且在数据的情况下可能会经常更改,因此即使您使用 VCS,您会比较什么来进行还原,这有什么帮助?假设您有一个实时系统,然后恢复到较早的版本会丢失临时存储的所有数据,虽然我从未尝试过,但我怀疑它可能会破坏 RDBMS 的整体完整性。

            更好的解决方案是使用为该 RDBMS 构建的备份应用程序,MySQLdump 以 MySQL 为例,它会生成数据和数据结构的快照并将其存储在安全的地方。

            可以定期安排转储,您可以执行诸如主/从数据库(或其他策略)之类的操作,这样您就可以在不影响性能的情况下即时备份实时生产数据库

            【讨论】:

            • 我相信 OP 是在询问 DDL 和脚本的源代码控制,而不是如何备份完整的数据库。
            • 是的,看来我很抱歉,所以他在问如何对应用程序进行源代码控制?
            • 通常,版本控制的本质是先存储原始文件,然后再存储增量,这也是不正确的。这不是 git 的工作方式。
            猜你喜欢
            • 1970-01-01
            • 2012-10-07
            • 2020-06-28
            • 2017-07-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-25
            • 1970-01-01
            • 2011-08-25
            相关资源
            最近更新 更多