---
title: "overlane project merge"
description: "Merge a second project for the same code into this one"
---

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

# overlane project merge

{/* Generated by apps/docs/scripts/generate.mjs (CLI pages from the command registry in packages/cli). Do not edit; run `pnpm --filter @overlane/docs gen`. */}

Moves everything the other project holds (runs, reviews, issues, memory, settings and links) into this project, gives this project the other's GitHub repository and connection, makes this project's Overlane Git repository the mirror of that GitHub repository, and deletes the other project. This project keeps its ID. If the two hold records that clash, nothing changes. A person or agent token allowed to manage the project's policy can run it.

## Usage

```sh
overlane project merge from [--into PROJECT_ID] [--preview] [--dry-run]
```

## Arguments

| Argument | Required | Description |
| --- | --- | --- |
| `from` | yes | The project to fold in and delete |

## Flags

| Flag | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `--into` | string | no |  | The project that stays (default: the one this checkout is bound to) |
| `--preview` | boolean | no |  | Ask the service how many rows of each kind would move, and change nothing |
| `--dry-run` | boolean | no |  | Print the requests and file changes this command would make, then stop. Needs no credentials. |

## Examples

```sh
overlane project merge overlane-2 --into overlane --preview
overlane project merge overlane-2 --into overlane
```

## Behavior

- Effect: `write` (changes local or hosted state).
- Needs credentials: yes. Uses the network: yes.
- Supports `--dry-run`: yes. Accepts `--force`: no.
- Machine-readable description: `overlane schema project merge`.

## Result

With `--json` (the default when stdout is not a terminal) the command prints this JSON Schema's shape on stdout.

```json
{
  "anyOf": [
    {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "preview": {
              "type": "boolean",
              "const": true
            },
            "into": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
              "description": "project identifier"
            },
            "from": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
              "description": "project identifier"
            },
            "repository": {
              "type": [
                "string",
                "null"
              ]
            },
            "rows": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "total": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "preview",
            "into",
            "from",
            "repository",
            "rows",
            "total"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "tenantId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
              "description": "tenant identifier"
            },
            "projectId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
              "description": "project identifier"
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "provider": {
              "type": "string",
              "enum": [
                "overlane",
                "github",
                "gitlab"
              ]
            },
            "repository": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "overlane",
                    "github",
                    "gitlab"
                  ]
                },
                "host": {
                  "type": "string",
                  "enum": [
                    "github.com",
                    "gitlab.com",
                    "overlane"
                  ]
                },
                "owner": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "name": {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9._-]{1,100}$"
                }
              },
              "required": [
                "owner",
                "name"
              ],
              "additionalProperties": false
            },
            "connection": {
              "type": "object",
              "properties": {
                "provider": {
                  "type": "string",
                  "enum": [
                    "overlane",
                    "github",
                    "gitlab"
                  ]
                },
                "installationId": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "externalId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                }
              },
              "required": [
                "provider"
              ],
              "additionalProperties": false
            },
            "overlaneGit": {
              "type": "object",
              "properties": {
                "mirror": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "overlane",
                        "external"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "mirror"
              ],
              "additionalProperties": false
            },
            "releaseVersion": {
              "type": "string",
              "minLength": 1
            },
            "releaseDigest": {
              "type": "string",
              "pattern": "^sha256:[0-9a-f]{64}$"
            },
            "createdAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "codeLayer": {
              "default": false,
              "type": "boolean"
            },
            "codeMapContext": {
              "type": "string",
              "enum": [
                "default",
                "on",
                "off"
              ]
            },
            "repoSignIn": {
              "default": true,
              "type": "boolean"
            },
            "archivedAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "deletedAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "tenantId",
            "projectId",
            "name",
            "provider",
            "releaseVersion",
            "releaseDigest",
            "createdAt",
            "codeLayer",
            "repoSignIn"
          ],
          "additionalProperties": false
        }
      ]
    },
    {
      "type": "object",
      "properties": {
        "dryRun": {
          "type": "boolean",
          "const": true
        },
        "service": {
          "type": "string"
        },
        "requests": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "method": {
                "type": "string"
              },
              "path": {
                "type": "string"
              },
              "body": {},
              "note": {
                "type": "string"
              }
            },
            "required": [
              "method",
              "path"
            ],
            "additionalProperties": false
          }
        },
        "commands": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "writes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": "string"
              },
              "action": {
                "type": "string",
                "enum": [
                  "write",
                  "append",
                  "delete"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "path",
              "action",
              "description"
            ],
            "additionalProperties": false
          }
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "dryRun",
        "requests",
        "commands",
        "writes",
        "notes"
      ],
      "additionalProperties": false
    }
  ]
}
```

See [exit codes](/cli/#exit-codes) for the status the process returns.

Source: https://docs.overlane.app/cli/project-merge/index.mdx
