> ## Documentation Index
> Fetch the complete documentation index at: https://docs.prophecy.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Deployment workflow

> Learn how to use Git for deployment

<Callout icon="/images/icon.png" color="#FFC107">
  Available for [Enterprise Edition](/data-engineering/administration/platform/editions) only.
</Callout>

Prophecy provides a recommended mechanism for using Git based development. The four main phases of integrating your changes are **Commit**, **Pull**, **Merge**, and **Release**. A standard development pattern looks like this, though other mechanisms like forking are also supported:

<img src="https://mintcdn.com/prophecy-62973bd0/6yiaaii50cGrpbpw/data-engineering/ci-cd/deployment/img/project-git.png?fit=max&auto=format&n=6yiaaii50cGrpbpw&q=85&s=a7bba4fe352c253df8def31b73c5fda9" alt="Project Git Flow" width="3944" height="1012" data-path="data-engineering/ci-cd/deployment/img/project-git.png" />

Let's develop and deploy a project to illustrate these phases.

## Create a project

1. Open the **Create Entity** page from the left sidebar.
2. Click **Project**
3. Create a new project or import an existing project.
4. Choose existing Git credentials or connect new Git credentials.
5. Specify the desired repository and path accessible to your Git user to store the project.

For new projects, specify an empty repository or an empty path within an existing repository. For imported projects, select a repository, forked repository, or repository path that already contains the relevant project code.

<img src="https://mintcdn.com/prophecy-62973bd0/6yiaaii50cGrpbpw/data-engineering/ci-cd/deployment/img/new_project_git_credentials.png?fit=max&auto=format&n=6yiaaii50cGrpbpw&q=85&s=5309c8e91cc8cb07952683257433fafb" alt="New project" width="2620" height="1511" data-path="data-engineering/ci-cd/deployment/img/new_project_git_credentials.png" />

## Checkout branch

A branch in Git is like a separate version of your project where you can make changes without affecting the main version. It lets you work on new features or fixes independently, and you can later merge your changes back into the main project.

Let's checkout (or switch to) a different branch.

1. Open a project in the editor.
2. Select the **Git** tab in the bottom bar.
3. Click **Checkout branch**.
4. Choose an existing branch from the dropdown or create a new branch by typing a new name.
5. Click **Checkout**.

<img src="https://mintcdn.com/prophecy-62973bd0/6yiaaii50cGrpbpw/data-engineering/ci-cd/deployment/img/checkout-branch.png?fit=max&auto=format&n=6yiaaii50cGrpbpw&q=85&s=16d8d2f5b5447638e6585a4faf6c8059" alt="Checkout branch" width="2620" height="1511" data-path="data-engineering/ci-cd/deployment/img/checkout-branch.png" />

## Make changes on the branch

A **commit** represents changes to one or more files in your project that let you keep and view project history. When you make changes to the pipeline, you will want to commit them. Let's see how to commit pipeline changes to preserve them in Git.

1. Make a change in your project, such as creating a new pipeline.
2. Click **Commit Changes** to open the Commit window.
3. Write a commit message or let our Copilot write one for you.
4. Review the change and click **Commit**.

<img src="https://mintcdn.com/prophecy-62973bd0/6yiaaii50cGrpbpw/data-engineering/ci-cd/deployment/img/commit-changes.png?fit=max&auto=format&n=6yiaaii50cGrpbpw&q=85&s=17efd785bcd83fd754144375a2959873" alt="Commit changes" width="2812" height="900" data-path="data-engineering/ci-cd/deployment/img/commit-changes.png" />

Once you have committed your changes, you have the option to continue developing your pipelines or to **merge** your changes. In this case, choose **Continue**.

## Merge changes

**Merge** will take the changes in the *current branch* and merge them into a *base branch*. Your changes will become part of the base branch and will be available to anyone else whose can access the base branch.

1. Ensure that you are merging to the correct base branch.
2. Review the commits that you are merging.
3. If everything looks right, click **Merge**.

<img src="https://mintcdn.com/prophecy-62973bd0/6yiaaii50cGrpbpw/data-engineering/ci-cd/deployment/img/merge.png?fit=max&auto=format&n=6yiaaii50cGrpbpw&q=85&s=a84cec7bce0caac94645504903806d11" alt="Merge changes" width="2620" height="1511" data-path="data-engineering/ci-cd/deployment/img/merge.png" />

<Note>
  In this how-to, we have not discussed the **Pull** section of the Commit window. **Pull** brings changes that have occurred in [remote branches](https://git-scm.com/book/ms/v2/Git-Basics-Working-with-Remotes) into the Prophecy-local branches.

  If you have any upstream changes that need to be pulled into the local branches, you'll see that option in the **Pull** section before moving on to **Merge**.
</Note>

## Release and Deploy

When you **Release and Deploy** your project, a particular commit is tagged in the base branch with a user-specified version. This allows you designate a new version as ready for production, or inform users who may be subscribed to datasets defined within your project that there might be changes in the published dataset.

1. Select the commit you wish to deploy.
2. Specify the release version. This is usually a number, using a strategy like [semantic versioning](https://semver.org/).
3. Fill in the release notes to describe the release.
4. Click **Release and Deploy**.

<img src="https://mintcdn.com/prophecy-62973bd0/6yiaaii50cGrpbpw/data-engineering/ci-cd/deployment/img/release-project.png?fit=max&auto=format&n=6yiaaii50cGrpbpw&q=85&s=9812053032e2126136172108e1cd36e9" alt="Release changes" width="2620" height="1511" data-path="data-engineering/ci-cd/deployment/img/release-project.png" />

At this point, you have worked through one iteration of your project's lifecycle! To learn more about different deployment options, visit [Deployment](/data-engineering/ci-cd/deployment/deployment).
