【问题标题】:Git Notifications on Pull/Submodule Update拉取/子模块更新的 Git 通知
【发布时间】:2014-12-08 15:29:04
【问题描述】:

我目前在一个开发团队中使用 MySql、Go 和用于前端的自定义模板引擎构建网站。我们使用 Git 进行版本控制。

当我编辑模型结构时,我有时必须对 db 结构进行重大更改(我们仍处于此过程的早期阶段)。我们在 Go 代码中构建我们的架构,所以我需要做的就是删除我的数据库,应用程序将在启动时重新创建一个具有正确结构的新数据库。

但是,我的队友不一定知道数据库的这些重大更改。他们进行拉取或子模块更新,大多数事情可能工作正常,但是当他们移动到网站的特定部分或使用特定功能时,他们会遇到奇怪的数据库错误(图,对吗?)。

我想通过某种方式通知我的队友数据库结构已更改,并且他们需要重建它。我显然可以将这些信息放入提交消息中,但是他们需要在每次拉取后检查日志。

当用户拉取/子模块更新/签出特定提交时,有什么方法可以在控制台中显示消息?

【问题讨论】:

  • 您可以使用合并后挂钩自动处理此问题
  • 如果你的数据库可以被应用程序重建,为什么它是版本化的?还是我错过了什么?
  • @FélixCantournet 该应用程序不会在您每次启动时重建数据库;仅当数据库存在但缺少表时。因此,如果您对与数据库中当前存在的架构/结构发生冲突的更改提交,您需要删除并重新创建它,以允许应用程序以新的正确格式重建表。

标签: mysql git go git-commit git-pull


【解决方案1】:

您可以按照建议使用 post-merge 挂钩,但是:

  • 它需要部署在所有客户端上
  • 如果拉取导致任何冲突,它将不会执行

集中式方法可能是最好的,如果你有:

  • 一个版本化的脚本能够重建数据库,并创建一个带有消息“DB Vxxx rebuilt”的新提交
  • 带有“Vxxx”的版本化文件,用于记忆或检测数据库的版本已更改
  • Git 存储库托管服务器上的唯一 pre-receive 钩子,如果推送的任何提交均不包含“DB Vxxx rebuilt”消息,并且与文件的内容 (git show) 匹配,则所有开发人员都会拒绝他们的提交存储官方数据库版本。

这样,开发人员必须确保他/她的历史记录包括已重建数据库的痕迹,其版本与最后一个修改所述数据库结构的人存储的版本相匹配。

【讨论】:

  • 我认为这不是我想要的。目标是当用户拉动时,他会收到一条消息。在您的建议中,除非用户在其提交消息中放置特定字符串,否则您将阻止用户推送到原点。这很好,但目标是通知开发人员,因为他刚刚拉出/签出某个提交,他需要重建他的数据库。有意义吗?
  • @MattMc 确实如此。我的建议更多是关于在推送中获取该消息。
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2012-09-14
相关资源
最近更新 更多