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
Documentation: https://radiandevcore.gitlab.io/tools/gitlab-projects-migrate
Package: https://pypi.org/project/gitlab-projects-migrate/
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
- mkdocs: Project documentation with Markdown
- mkdocs-material: Material theme for mkdocs documentation
- 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
File details
Details for the file gitlab_projects_migrate-5.3.1.tar.gz
.
File metadata
- Download URL: gitlab_projects_migrate-5.3.1.tar.gz
- Upload date:
- Size: 60.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2038b06ce629879c377b4ee7a17d9a040d9b689e3953dba2a4c42dafa12946c |
|
MD5 | 2921fa984d70930ea27acfe2b734056a |
|
BLAKE2b-256 | 0371639de1ba97ad4687e1c2a966dd8f7be6e1a6429049cd56915abcc4c102aa |
File details
Details for the file gitlab_projects_migrate-5.3.1-py3-none-any.whl
.
File metadata
- Download URL: gitlab_projects_migrate-5.3.1-py3-none-any.whl
- Upload date:
- Size: 36.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc8146782f064a411a4e7f11a9d0622c9fe025786c3ff03ab429c71a3c6ddedb |
|
MD5 | a43d0d0873f0f612569242c5fa84ed55 |
|
BLAKE2b-256 | 39b5f5c33c0b3e819d45b1a692b4ac8c12e4fe910dcdeab3e593894eef5e79ee |