跳至主要内容

团队开发

合并来自协作者的更改

  1. 拉取已更改的 Prisma 模式和 ./prisma/migrations 文件夹

  2. 运行 migrate dev 命令以应用新的迁移

    npx prisma migrate dev

迁移将**按照创建顺序应用**。创建日期是迁移子文件夹名称的一部分,例如,20210316081837-updated-fields是在 2021-03-16-08:18:37 创建的。

警告

本指南**不适用于 MongoDB**。
对于 MongoDB,使用 db push 而不是 migrate dev

示例:合并团队的更改

以下示例场景演示了三个开发人员团队如何共享和合并对 Prisma 模式和迁移历史的更改。

以下选项卡显示了团队在进行一轮更改之前和之后,Prisma 模式的状态。

schema.prisma
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}

团队的更改

您的团队成员 Ania 和 Javier 在其本地环境中对模式进行增量更改并生成迁移。

**Ania** 进行了以下更改

  1. 添加模型字段

    model User {
    /* ... */
    favoriteColor String?
    }
  2. 生成迁移

    npx prisma migrate dev --name new-field
  3. 提交已更改的模式和新迁移

    • ./prisma/schema.prisma
    • ./prisma/migrations/20210316081837-new-field/migration.sql

**Javier** 进行了以下更改

  1. 向模式添加新模型

    model Tag {
    tagName String @id
    tagCategory Category
    }
  2. 生成迁移

    npx prisma migrate dev --name new-model
  3. 提交已更改的模式和新迁移

    • ./prisma/schema.prisma
    • ./prisma/migrations/20210316091837-new-model/migration.sql

迁移历史现在有两个新的迁移

A diagram showing changes by two separate developers converging in a single migration history.

集成更改

**您**希望合并团队的更改。为此,您需要

  1. 拉取团队的最新更改,包括

    • 两个新的迁移

      • ./prisma/migrations/20210316081837-new-field/migration.sql
      • ./prisma/migrations/20210316091837-new-model/migration.sql
    • 更新的模式文件。Git 会自动将更新的模式与*您*的本地模式更改(新的 bestPacmanScore 字段)合并。

      model User {
      /* ... */
      favoriteColor String?
      bestPacmanScore Int?
      }

      model Tag {
      tagName String @id
      tagCategory Category
      posts Post[]
      }
  2. 运行 migrate dev 命令

    npx prisma migrate dev
    1. 将 Ania 和 Javier 的迁移应用于您的本地数据库。

      • ./prisma/migrations/20210316081837-new-field/migration.sql
      • ./prisma/migrations/20210316091837-new-model/migration.sql
    2. 使用您的更改创建一个新的迁移,提示您为其命名(pacman-field),并将新的迁移应用于您的本地数据库。

      • ./prisma/migrations/20210322081837-pacman-field/migration.sql
  3. 提交合并的 schema.prisma 和您的新迁移:./prisma/migrations/20210322081837-pacman-field/migration.sql

您的 schema.prisma 和本地数据库现在包含了团队的更改,迁移历史也包含了您的迁移。

A migration history with 5 migrations.

源代码管理

您应该将以下文件提交到源代码管理

  • .prisma/migrations 文件夹的内容,包括 migration_lock.toml 文件
  • Prisma 模式 (schema.prisma)

仅对 schema.prisma 文件进行源代码控制是不够的,您必须包含迁移历史。这是因为

  • 当您开始自定义迁移时,迁移历史包含**无法在 Prisma 模式中表示的信息**。例如,您可以自定义迁移以减轻破坏性更改可能导致的数据丢失。
  • prisma migrate deploy 命令用于将更改部署到暂存、测试和生产环境,它*仅*运行迁移文件。Prisma Migrate 仅使用模式读取 urlprovider 字段,而不是模型和字段。