# 使用版本控制管理您的管道项目

您可使用版本控制来管理管道项目的开发，并跟踪更改。

信息注释Qlik Talend Cloud Starter 订阅不提供版本控制。

使用版本控制时，您可以在设计过程中提交项目的版本。这允许您查看项目两个版本之间的更改。您还可以使用分支策略开发数据项目。这让您可以在每个工作区或分支中处理项目的独立版本。工作区可以由多个用户共享。然后，您可以将工作区中的更改合并到主分支中，以便部署到生产环境。

GitHub 被用作版本控制的提供者。实现关注共享储存库模型。

* 不支持 GitHub Enterprise Cloud 和 GitHub Enterprise Server。

* 有关共享储存库模型的更多信息，请参阅[关于协作开发模型](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models)。

* 有关 Git 和 GitHub 的更多信息，请参阅[关于 GitHub 和 Git](https://docs.github.com/en/get-started/start-your-journey/about-github-and-git)。

* GitHub 安全考虑事项

  Qlik Talend Cloud 支持 HTTPS 安全协议和个人访问令牌 (PAT)，这是 GitHub 的默认身份验证模式。有关详细信息，请参阅[关于 GitHub 身份验证](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-authentication-to-github)。

## 入门

* 在 GitHub 中创建一个用户，租户可以使用该用户访问 GitHub。这可能已经由管理员为您创建。

  用户必须具有以下作用域：

  * 仓库

  * read:org

  * read:user

  * 读取:项目

* 您需要对计划更改的存储库具有写访问权限。

* 您必须创建一个 GitHub 个人访问令牌（经典）。不支持细粒度的个人访问令牌。

  有关更多信息，请参阅 GitHub 文档：[管理您的个人访问令牌](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)。

* 在 GitHub 配置中，必须设置组织。

* 您需要在项目所在的空间中具有“可编辑”角色才能执行版本控制操作。

* 在开始使用版本控制之前，您必须设置一个配置，以便使用您创建的 GitHub 用户连接到 GitHub。

  [为 GitHub 设置配置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/VersionControl/Project-version-control.htm#Set)

* 当您设置了与 GitHub 的连接后，您可以将项目连接到存储库。

  [将项目连接到存储库](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/VersionControl/Project-version-control.htm#Connecti)

## 为 GitHub 设置配置

所有想要使用版本控制的用户都必须设置一个配置，以便使用 GitHub 用户帐户连接到 GitHub。

GitHub 连接

GitHub 连接

GitHub 连接 ![](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/qdi_version_github.png)

您可以在管道项目中配置 GitHub，或在用户配置文件设置中配置。请确保您已根据 [入门](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/VersionControl/Project-version-control.htm#Getting) 做好准备。

要在管道项目中配置 GitHub，请执行以下操作：

1. 单击 ![](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Data-connector-icons/GitHubConnector-square_26x26.png) ，然后单击 GitHub 配置。

2. 使用您的组织和 [入门](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/VersionControl/Project-version-control.htm#Getting) 中描述的 GitHub 个人访问令牌设置身份验证。

3. 单击确定。

信息注释GitHub - 版本控制类型的连接将在您的个人空间中创建。所有用户都将拥有个人版本控制连接，因此不需要对其进行管理。

现在，您可以将项目连接到存储库。

## 将项目连接到存储库

您必须先将项目与存储库连接，然后才能开始使用版本控制。请确保您已建立与 GitHub 的连接。

将项目连接到版本控制。

将项目连接到版本控制。

将项目连接到版本控制。 ![Dropdown list with regions during tenant setup.](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/GitHub3-pointer.png)

1. 在管道项目中，单击项目上 ... ，选择连接到版本控制。

2. 选择要与项目关联的存储库。

3. 添加基本目录路径。

   如果您想连接到 GitHub 中的现有项目，必须使用相同的路径。

4. 您可以选择提交项目，并在连接后将项目推送到远程存储库。输入提交消息。

   如果不提交和推送，将在工作区中创建一个主分支，但不会在远程存储库中创建。

5. 单击连接。

项目现在已连接到所选存储库。这在项目卡的底部用 ![](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/Data-connector-icons/GitHubConnector-square_26x26.png)、存储库的名称和当前分支表示。

打开项目时，标题行将包含一个带有版本控制选项的 GitHub 菜单。项目名称还将附加当前分支的名称。

## 开发具有版本控制的项目

您可以使用不同的方法进行版本控制：

* 直接在主要分支工作。这主要适用于项目中想要跟踪更改的单个开发人员，但也可以由一组同步工作的开发人员使用。

* 采用分支策略，可以让多个开发人员做出贡献。您还可以创建分支，以将新特性或更改相互隔离。

### 简化单个开发人员项目的工作流程

您可以直接在项目的主分支上工作。这种方法更简单，包含的操作更少，但仍然可以让您跟踪更改。如果有多个开发人员，他们需要小心保持同步。

当您对要应用的项目进行更改后，只需进行提交和推送。

### 多开发人员项目的工作流

如果有多个开发人员在处理一个项目，或者您想隔离更改，则可以使用此工作流。这涉及创建一个可以与其他用户共享的开发分支。通过此工作流，开发人员可以跟踪彼此的更改，并决定何时将更改合并到主分支。

具有版本控制的多开发人员项目的工作流

具有版本控制的多开发人员项目的工作流

具有版本控制的多开发人员项目的工作流 ![](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/qdi_version_flow_multi.png)

1. 创建新分支

   从主分支创建一个新的开发分支。您可以与更多用户共享该分支。

2. 开发

   对项目进行所有必要的更改。

   信息注释版本控制中不维护数据库架构和连接。

3. 应用远程更改

   将其他分支的远程更改应用于您的工作区域，以确保您了解其他分支的最新更改。这有助于避免或减轻冲突的变化。

   如果您有两个分支包含可能冲突的更改，解决方法是：

   1. 对两个工作领域进行更改。

   2. 将两个分支合并到主分支。

   3. 再次应用远程更改。

4. 提交并推送

   将您的更改提交并推送到开发分支。所有对象都将被推送，因此在提交项目之前验证项目是不错的做法。

5. 创建拉取请求并合并

   当您准备好进行开发时，那么是时候将工作区的更改合并到主分支了。

   您可以在项目版本控制中创建拉取请求，但合并必须在 GitHub 中执行，您还可以在该处设置审批。有关更多信息，请参阅 [GitHub 拉取请求文档](https://docs.github.com/en/pull-requests)

### 创建新分支

1. 在项目中，单击 GitHub 并选择创建新分支。

   该项目必须连接到版本控制。您还必须拥有项目目标连接所在空间的权限。

2. 选择以从主分支创建分支。

3. 输入分支的名称。

4. 在所有模式的分支前缀中设置要添加到项目中所有模式的前缀。这允许对所有模式进行唯一命名，以避免命名冲突。

5. 单击创建。

从主分支创建一个新分支，并从存储库中签出。该分支包含项目的新版本，所有任务都处于“新建”状态。也就是说，它们没有准备好，也不包含任何数据。

### 应用远程更改

您可以将远程存储库中的更改应用于您的工作区域。这可能是在 Qlik Cloud 集成版本控制之外创建的更改，例如在 GitHub 或其他工具中创建的更改。这有助于您在将更改提交并推送到分支时避免冲突。

1. 在项目中，单击 GitHub 并选择应用远程更改。

   如果发现更改，将显示将远程更改应用于工作区对话框。

2. 现在，您可以选择要应用更改的任务并检查更改。对于每次更改，您可以选择使用哪个版本，即远程版本或工作区中的版本。

   对项目和导入的项目之间不同的映射连接进行任何必要的更改。

   例如，导入的项目可能使用一个名为 SQL1 的源连接，而此项目使用一个类似的名为 SQL2 的连接。在这种情况下，将导入的连接映射到为原始版本中添加的任务设置连接中的 SQL2。

   如果更改包含跨项目源，并且引用的项目处于版本控制之下，则会为每个跨项目源提供一个分支选择器。选择要使用的分支。如果引用的项目未受版本控制，则不会显示分支选择器。

   信息注释选择要映射的连接时，可以创建新的数据库连接，但不能创建 SaaS 应用程序连接。

3. 单击应用远程更改

如果更改包括新的数据任务，则必须添加源连接和目标连接。

信息注释如果只应用选定的任务，则必须注意保持项目的结构有效性。例如，如果应用新的存储任务，则还必须应用源登陆任务。手动添加登陆数据集不起作用。

### 提交并推送

您可以将更改提交并推送到分支。由于未应用于工作区的远程更改可能会被覆盖，因此您应该在提交和推送之前执行应用远程更改。

1. 在项目中，单击 GitHub 并选择提交并推送。

   如果发现更改，将显示提交并推送对话框。

2. 添加一条提交消息，帮助您跟踪更改的内容。

3. 单击提交并推送

### 创建拉取请求

创建一个拉取请求 (PR)，以合并从工作区到主分支的更改。

1. 在项目中，单击项目上的 GitHub，然后选择创建拉取请求。

   创建拉取请求对话框即会显示。

2. 添加拉取请求的标题和描述。

   您还可以选择在创建后在 GitHub 中打开拉取请求。

3. 单击创建拉取请求。

现在，您可以为拉取请求设置审批，并在 GitHub 中执行合并。

信息注释如果需要使用更高级的选项，您还可以选择在 GitHub 中创建拉取请求。

### 删除分支

将更改合并到主分支后，可以删除分支。

1. 在项目中，单击要删除的分支，选择删除分支。

   您也可以选择在版本控制中删除远程分支。

   如果有未提交的更改，您需要确认在删除分支时这些更改将丢失。

## 删除项目的版本控制

您可以断开项目与版本控制的连接。如果存在现有分支，则必须先删除它们，然后才能断开项目的连接。

1. 在管道项目中，单击要断开连接的项目上的 ...，然后选择与 GitHub 断开连接。

## 从版本控制导入项目

您可以从版本控制导入项目，例如，如果您想审查其他开发人员的项目或协作处理项目。从版本控制导入项目还可以将项目共享到其他空间或租户。您可以与同一租户或另一租户上的不同空间共享项目的一个版本。当您想创建两个环境时，这很有用，例如一个用于开发，一个用于生产。"

### 导入项目之前

在开始导入项目之前：

* 如果要导入新租户或空间，请创建所需的所有新连接。

* 如果项目使用的 SaaS 应用程序连接在租户或空间上尚不存在，则必须在开始导入之前创建连接并生成元数据。

* 如果要导入跨项目管道，则必须先导入上游项目。

### 导入项目

如果项目使用其他项目的任务，则必须映射项目和任务，除非空间和项目的名称相同。

1. 在 数据集成 &gt; 项目中，单击 新建 并选择 从版本控制导入项目。

2. 选择储存库，然后选择分支。

   如果需要，选择基本目录路径，然后单击 显示项目。

   从列表中选择要导入的项目。

   单击下一步。

3. 为新项目设置项目属性。

   您必须在空间中选择要将项目添加到的空间。

   在数据平台中，您可以更改项目的数据平台以及与数据平台的连接。

   如果从其他租户导入项目，或者在上一步中更改了数据平台，则需要更改连接。

   您可以更改指向暂存区域的连接。如果您从另一个租户导入了项目，或者某些情况下在上一步中更改了数据平台，则需要执行此操作。

   单击下一步。

4. 为新项目设置默认项目设置。

   您可以在所有模式的前缀中为项目中创建的数据模式添加前缀。当导入的项目与导出的项目位于同一个云数据仓库中时，这非常有用。

   您还可在数据库名称中设置默认名称。对于 Snowflake 项目，您可以设置默认数据集名称；对于 Databricks 项目，您可以设置默认目录名称。您可以为所有任务类型使用项目默认名称，也可以为每个任务类型设置默认名称或自定义的名称。

   单击下一步。

5. 设置连接和任务设置。

   您可以替换导入的源连接或跨项目源。如果您从另一个租户导入项目，则需要此选项。

   当将跨项目源映射到受版本控制的项目时，分支选择器可用。选择要使用的引用项目分支。如果引用的项目未受版本控制，则不会显示分支选择器。如果跨项目源映射到非主分支，分支名称将显示在项目名称旁边的括号中。

   在可选任务设置中，您还可更改在原始项目中被覆盖的任务设置。

6. 准备好后，单击导入。

项目即会添加到 数据集成 主页。

### 处理从版本控制导入的项目

您的工作方式与常规版本控制项目相同，但有一些区别：

* 您只能切换到主分支，或切换到从版本控制导入的另一个分支。

* 如果您从分支导入，主分支将为空。

* 删除项目不会删除远程版本。

## 安全考虑事项

确保在 Qlik Talend Data Integration 和 GitHub 之间保持同步的安全配置。

* 在Qlik Talend Data Integration 中，权限基于可能包含多个项目的空间。在 GitHub 中，权限基于也可能包含多个项目的存储库。最佳做法是将它们对齐，并将一个空间中的所有项目连接到同一个存储库。

* 请记住，Qlik Talend Data Integration 和 GitHub 为用户使用不同的权限和角色。

## 最佳实践

以下是使用版本控制处理项目时的一些通用最佳实践。

* 在 GitHub 中添加一个描述存储库的 README 文件。有关更多信息，请参阅[关于 README](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes)。

  如果您从一个空储存库开始，Qlik Talend Cloud 版本控制会自动添加一个空的 README.md文件。

* 一般来说，你应该让Qlik Talend Cloud 版本控制来管理 GitHub 儲存库。

* 只提交有效且经过测试可以运行的项目。

  如果添加具有尚未准备或转换的登陆或注册数据任务的项目，则源列尚未包含在内。在准备和转换任务时添加源列。

* 当您为复制项目创建分支时，您应该知道这些分支默认使用相同的目标。这意味着在分支中运行任务可以覆盖主版本的数据。为避免数据丢失，请更改分支中的目标设置，使其与主版本不冲突。

* 创建分支时，可能存在尚未应用于工作区的远程更改。在创建分支之前或之后应用远程更改，除非您想放弃远程更改。

* 对两个不同分支中的同一数据集进行更改可能会导致难以解决的合并冲突以及数据集的重新创建。

  信息注释当数据集添加到任务时，它会获得一个内部标识符。内部标识符用于在管道中实现无缝重命名和其他元数据操作。在单独的项目或分支中创建相同的数据集时，内部标识符将不同，这可能会在合并两个分支时导致冲突。这可能会导致准备过程删除并重新创建数据集，即使它具有相同的名称。

### 在分支机构工作

您可以创建一个项目，进行设计，准备就绪后，使用 MAIN 分支将其部署到生产中。MAIN 上的版本与您的生产管道相对应。在第一次部署之后，千万不要直接编辑 MAIN 分支。

任何时候，只要开发人员想对项目进行新的改动，如添加功能或修正错误，就需要创建一个新的分支。

开发人员可根据开发需要创建任意数量的分支

* 为分支使用模式前缀，以避免在进行更改时发生数据库冲突。

* 在一个分支中，开发人员可以做出任意数量的修改，并根据需要提交和推送任意次数。建议在独立的提交中隔离每项变更。例如，如果您对转换任务进行了更改，而该更改也会影响数据集市，请确保将这两项更改都包含在一次提交中

* 所有团队成员都应随时使用应用远程更改来确保他们的 MAIN 是最新的，尤其是在提交更改之前。

当开发人员完成自己分支的工作后，他们可以创建一个拉取请求供同行审查。

信息注释在使用应用远程更改和将分支更改合并回主分支之前，必须先创建拉取请求。

经其他团队成员审核批准后，您就可以将拉取请求与 GitHub 中的 MAIN 版本合并。

最后，在项目中使用应用远程更改将已批准的分支更改拉回到 MAIN 分支（生产）。

信息注释所有团队成员都应随时使用应用远程更改来确保他们的 MAIN 是最新的。

### 空间中工作

对于较大和关键的部署，建议使用开发和生产专用空间，以隔离更改并确保管道完整性。为每个空间的数据源和目标使用专用的数据连接。

* 生产

  MAIN 分支反映的是生产中的情况。这意味着一个项目只有一个 MAIN 版本。

  生产被隔离在一个专用的数据空间，例如 PROD。专用连接会分配给生产空间。

  不直接在生产空间/MAIN 分支中进行更改。所有更改都是在其他有专用连接的空间内，利用分支机构进行的。

  您可以重用 GitHub 中现有项目的 MAIN 版本。在 GitHub 中创建一个与现有项目同名的空项目。这将检索 MAIN 分支上的最新可用版本，以便开始编辑。

  用户创建一个新分支，进行修改，创建拉取请求，合并，然后拉回到 MAIN/Production。

* 开发

  开发人员可以在专用数据空间（例如 DEV）中隔离他们的更改。专用连接会分配给 DEV 空间。

  更改使用分支进行隔离，通常每个开发人员一个分支。创建分支时使用模式前缀，以避免更改时发生数据库冲突。

* 审查/质量验收

  审查员获准进入开发空间并连接到：

  * 在 Qlik Talend Cloud 中打开并测试项目分支。

  * 批准拉取请求，以便在 GitHub 中进行合并。

  * 通知团队成员何时可将已批准的更改拉回到 MAIN/Production。

将已批准的更改部署回 MAIN/Production 空间时，必须重新为生产空间连接分配连接。

## 声明式管道管理

启用版本控制后，项目将以 YAML 配置文件的形式存储在 GitHub 中。您可以导出这些文件，在 IDE 中编辑它们，并重新导入它们以更新项目。这种声明式工作流支持代码审查、在 CI/CD 流水线中进行自动化验证，以及使用 Git 分支进行环境提升。

有关更多信息，请参阅[声明式流水线](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/DeclarativePipelines/Declarative-pipelines-overview.htm)。

## 限制

* 版本控制不支持以 Qlik Cloud (QVD) 作为目标的项目。

* 如果存在分支，则无法使用版本控制断开或删除项目。必须先删除分支，然后才能断开连接或删除项目。

* 无法使用版本控制重命名项目。

* 当您删除租户时，GitHub 中使用版本控制存储的对象不会被删除。您需要手动删除这些对象。

* 如果一个存储库被许多项目使用，或者包含许多未存储在 Qlik Talend Data Integration 中的文件，性能可能会降低。

* 版本控制中不维护数据库架构和连接。

* 不支持 GitHub 细粒度个人访问令牌。

* 即使两个项目位于同一存储库中，每个存储库中也只能有一个项目使用一个分支（主分支除外）。

* 无法从使用不同目标平台的项目应用远程更改。例如，如果您将更改提交到 Snowflake 上的项目，则无法将更改应用于 Databricks 项目。