Migrate GitLab projects from a GitLab group to another GitLab's group
Project description
gitlab-projects-migrate
Migrate GitLab projects from a GitLab group to another GitLab's group
Purpose
The migration can be performed between entirely different GitLab servers.
The following steps are required before using the tool:
- The groups need to be created manually by the user or by a GitLab administrator
- The GitLab user tokens must be created with an
api
scope (a short expiration date is recommended)
Examples
# Show the helper menu
gitlab-projects-migrate
# Migrate projects from one group to another, then migrate subgroups
gitlab-projects-migrate 'https://gitlab.com/old/group' 'https://gitlab.com/new/group'
gitlab-projects-migrate 'https://gitlab.com/old/group/subgroup1' 'https://gitlab.com/new/group/subgroup1'
gitlab-projects-migrate 'https://gitlab.com/old/group/subgroup2' 'https://gitlab.com/new/group/subgroup2'
# Migrate projects from one group to another, then archive or delete sources
gitlab-projects-migrate --archive-sources 'https://gitlab.com/old_group_1' 'https://gitlab.com/new_group_1'
gitlab-projects-migrate --delete-sources 'https://gitlab.com/old_group_2' 'https://gitlab.com/new_group_2'
# Migrate projects from one GitLab to another GitLab
gitlab-projects-migrate 'https://old.gitlab.com/group/subgroup' 'https://new.gitlab.com'
# Copy a project between two groups
gitlab-projects-migrate 'https://gitlab.com/old/group/project' 'https://gitlab.com/new/group'
# Copy and rename a project within a group
gitlab-projects-migrate 'https://gitlab.com/group/project' 'https://gitlab.com/group' 'new_project_name'
# Copy projects as templates and reset imported entities automatically
gitlab-projects-migrate --reset-entities 'Template/Issues' 'https://gitlab.com/group/template_issues' 'https://gitlab.com/group' 'issues'
gitlab-projects-migrate --reset-entities 'Template/Repository' 'https://gitlab.com/group/template_repository' 'https://gitlab.com/group' 'repository'
Usage
usage: gitlab-projects-migrate [-h] [--version] [--no-color] [--update-check] [--settings] [--set GROUP KEY VAL]
[-c FILES] [--archive-exports FOLDER] [--archive-sources | --delete-sources]
[--dry-run] [--exclude-group] [--exclude-subgroups] [--exclude-projects] [--confirm]
[--overwrite] [--rename-project NAME] [--available-entities]
[--reset-entities ENTITIES] [--set-avatar FILE] [--update-description] [--]
[input_url_path] [output_url_namespace] [rename_single_project]
gitlab-projects-migrate: Migrate GitLab projects from a GitLab group to another GitLab's group
internal arguments:
-h, --help # Show this help message
--version # Show the current version
--no-color # Disable colors outputs with 'NO_COLOR=1'
# (or default settings: [themes] > no_color)
--update-check # Check for newer package updates
--settings # Show the current settings path and contents
--set GROUP KEY VAL # Set settings specific 'VAL' value to [GROUP] > KEY
# or unset by using 'UNSET' as 'VAL'
credentials arguments:
-c FILES, --config FILES # Python GitLab configuration files (default: PYTHON_GITLAB_CFG environment)
migration arguments:
--archive-exports FOLDER # Store exported projects and groups to a folder
--archive-sources # Archive sources after successful migration
--delete-sources # Delete sources after successful migration
--dry-run # Enable dry run mode to check without saving
--exclude-group # Exclude parent group migration
--exclude-subgroups # Exclude children subgroups migration
--exclude-projects # Exclude children projects migration
--confirm # Automatically confirm all removal and contents warnings
--overwrite # Overwrite existing projects on output GitLab
--rename-project NAME # Rename GitLab output project (only for single input project)
--available-entities # List the available GitLab export/import entities known by the tool
--reset-entities ENTITIES # List of GitLab export/import entities to reset separated by "," (default: Members)
general settings arguments:
--set-avatar FILE # Set avatar of GitLab output projects and groups
--update-description # Update description of GitLab output projects and groups automatically
positional arguments:
-- # Positional arguments separator (recommended)
input_url_path # Input GitLab group or project path URL
output_url_namespace # Output GitLab group or user namespace URL
rename_single_project # Rename GitLab output project (only for single input project)
environment variables:
GITLAB_INPUT_TOKEN # Input GitLab API token environment variable (fallback: GITLAB_TOKEN)
GITLAB_OUTPUT_TOKEN # Output GitLab API token environment variable (fallback: GITLAB_TOKEN)
CI_JOB_TOKEN # GitLab CI job token environment variable (CI only)
Python GitLab configuration file
gitlab-projects-migrate
uses the same configuration files as the python-gitlab
API,
holding domains, URL and private tokens credentials for the GitLab instances.
The default user configuration file can be created at ~/.python-gitlab.cfg
.
The -c
or --config
parameters can provide specific configuration files,
otherwise the PYTHON_GITLAB_CFG
environment variable can be used.
Example ~/.python-gitlab.cfg
configuration file:
[global]
default = gitlab.com
ssl_verify = true
timeout = 5
[gitlab.com]
url = https://gitlab.com
private_token = glpat-...
[gitlab.local.dev]
url = https://gitlab.local.dev
private_token = glpat-...
[gitlab.private.dev:4243]
url = https://gitlab.private.dev:4243
private_token = glpat-...
ssl_verify = /usr/local/share/ca-certificates/gitlab.private.dev.crt
python-gitlab
configuration files documentation: Getting started with the CLI / Configuration files
Userspace available settings
gitlab-projects-migrate
creates a settings.ini
configuration file in a userspace folder.
For example, it allows to disable the automated updates daily check ([updates] > enabled
)
The settings.ini
file location and contents can be shown with the following command:
gitlab-projects-migrate --settings
Environment available configurations
gitlab-projects-migrate
uses colored
for colors outputs and questionary
for interactive menus.
If colors of both outputs types do not match the terminal's theme,
an environment variable NO_COLOR=1
can be defined to disable colors.
Dependencies
- colored: Terminal colors and styles
- python-gitlab: A python wrapper for the GitLab API
- questionary: Interactive terminal user interfaces
- setuptools: Build and manage Python packages
- update-checker: Check for package updates on PyPI
References
- commitizen: Simple commit conventions for internet citizens
- git-cliff: CHANGELOG generator
- gitlab-release: Utility for publishing on GitLab
- gcil: Launch .gitlab-ci.yml jobs locally
- mypy: Optional static typing for Python
- pre-commit: A framework for managing and maintaining pre-commit hooks
- pre-commit-crocodile: Git hooks intended for developers using pre-commit
- PyPI: The Python Package Index
- twine: Utility for publishing on PyPI
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for gitlab_projects_migrate-5.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | cab162981ed6d5f028dcc000ff991ddef14d1c1854b20c31f5b727066c5e6be8 |
|
MD5 | c07d4b4d9be0baa45ca63519c87b861a |
|
BLAKE2b-256 | f3668ccc62aec29533685c02239767c7f79b51a785b76a4827b209e984afc9cf |
Hashes for gitlab_projects_migrate-5.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ec47f32867f091a169baf4718517f7ab2a727b37093934b0f91406ed51278af5 |
|
MD5 | 2f18718b65eb425f0345df19b416d503 |
|
BLAKE2b-256 | 67dafc6cf8c08cede46d48a0c0ae813d415f5b392a9309a534ab64100d3d191e |