Easy migration between GitLab instances for specific group with it's repositories and subgroups.
Project description
g2g: GitLab to GitLab Group Migrator
g2g
is a Python CLI utility designed to streamline the process of migrating groups, and subgroups from one GitLab instance to another.
Features
- Migrate entire group with his nested subgroups/repositories.
- Works with private and public repositories.
- Handles existing groups and repositories elegantly.
- Generate a JSON backup of Group metadata.
- Token-based authentication for security.
Installation
You can install the package from PyPI:
pip install g2g
Usage
Basic usage:
The primary commands for g2g
are download
and upload
.
g2g download --api-url "https://gitlab.com/api/v4" --group "mloops" --clean-all
Please enter your GitLab Private Token:
Removing existing group directory: mloops
Cloning devops-within...
Cloning devops-brother...
Downloading subgroup devops-card
Cloning devops-Mr...
Downloading subgroup devops-animal
Cloning devops-life...
Downloading subgroup devops-home
Cloning devops-free...
Downloading subgroup devops-recently
Cloning devops-leave...
Cloning devops-trouble...
Downloading subgroup devops-time
Cloning devops-while...
Downloading subgroup devops-girl
Cloning devops-hotel...
g2g upload --api-url https://new.instance.localhost/api/v4 --group mloops
Please enter your GitLab Private Token for the new instance:
{
"devops-brother": {
"path": "mloops/devops-brother"
},
"devops-trouble": {
"path": "mloops/devops-home/devops-recently/devops-trouble"
},
"devops-leave": {
"path": "mloops/devops-home/devops-recently/devops-leave"
},
"devops-free": {
"path": "mloops/devops-home/devops-free"
},
"devops-while": {
"path": "mloops/devops-time/devops-while"
},
"devops-hotel": {
"path": "mloops/devops-time/devops-girl/devops-hotel"
},
"devops-within": {
"path": "mloops/devops-within"
},
"devops-life": {
"path": "mloops/devops-card/devops-animal/devops-life"
},
"devops-Mr": {
"path": "mloops/devops-card/devops-Mr"
}
}
Processing devops-brother with path parts: ['mloops', 'devops-brother']
Group specified. Updated path parts: ['mloops', 'devops-brother']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating new project: devops-brother under parent ID: 3283
Successfully created and pushed to https://new.instance.localhost/mloops/devops-brother.git
Processing devops-trouble with path parts: ['mloops', 'devops-home', 'devops-recently', 'devops-trouble']
Group specified. Updated path parts: ['mloops', 'devops-home', 'devops-recently', 'devops-trouble']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating or getting group: devops-home
Group devops-home created or fetched with ID: 3285
Creating or getting group: devops-recently
Group devops-recently created or fetched with ID: 3286
Creating new project: devops-trouble under parent ID: 3286
Successfully created and pushed to https://new.instance.localhost/mloops/devops-home/devops-recently/devops-trouble.git
Processing devops-leave with path parts: ['mloops', 'devops-home', 'devops-recently', 'devops-leave']
Group specified. Updated path parts: ['mloops', 'devops-home', 'devops-recently', 'devops-leave']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating or getting group: devops-home
Group devops-home created or fetched with ID: 3285
Creating or getting group: devops-recently
Group devops-recently created or fetched with ID: 3286
Creating new project: devops-leave under parent ID: 3286
Successfully created and pushed to https://new.instance.localhost/mloops/devops-home/devops-recently/devops-leave.git
Processing devops-free with path parts: ['mloops', 'devops-home', 'devops-free']
Group specified. Updated path parts: ['mloops', 'devops-home', 'devops-free']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating or getting group: devops-home
Group devops-home created or fetched with ID: 3285
Creating new project: devops-free under parent ID: 3285
Successfully created and pushed to https://new.instance.localhost/mloops/devops-home/devops-free.git
Processing devops-while with path parts: ['mloops', 'devops-time', 'devops-while']
Group specified. Updated path parts: ['mloops', 'devops-time', 'devops-while']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating or getting group: devops-time
Group devops-time created or fetched with ID: 3290
Creating new project: devops-while under parent ID: 3290
Successfully created and pushed to https://new.instance.localhost/mloops/devops-time/devops-while.git
Processing devops-hotel with path parts: ['mloops', 'devops-time', 'devops-girl', 'devops-hotel']
Group specified. Updated path parts: ['mloops', 'devops-time', 'devops-girl', 'devops-hotel']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating or getting group: devops-time
Group devops-time created or fetched with ID: 3290
Creating or getting group: devops-girl
Group devops-girl created or fetched with ID: 3292
Creating new project: devops-hotel under parent ID: 3292
Successfully created and pushed to https://new.instance.localhost/mloops/devops-time/devops-girl/devops-hotel.git
Processing devops-within with path parts: ['mloops', 'devops-within']
Group specified. Updated path parts: ['mloops', 'devops-within']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating new project: devops-within under parent ID: 3283
Successfully created and pushed to https://new.instance.localhost/mloops/devops-within.git
Processing devops-life with path parts: ['mloops', 'devops-card', 'devops-animal', 'devops-life']
Group specified. Updated path parts: ['mloops', 'devops-card', 'devops-animal', 'devops-life']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating or getting group: devops-card
Group devops-card created or fetched with ID: 3295
Creating or getting group: devops-animal
Group devops-animal created or fetched with ID: 3296
Creating new project: devops-life under parent ID: 3296
Successfully created and pushed to https://new.instance.localhost/mloops/devops-card/devops-animal/devops-life.git
Processing devops-Mr with path parts: ['mloops', 'devops-card', 'devops-Mr']
Group specified. Updated path parts: ['mloops', 'devops-card', 'devops-Mr']
Creating or getting group: mloops
Group mloops created or fetched with ID: 3283
Creating or getting group: devops-card
Group devops-card created or fetched with ID: 3295
Creating new project: devops-Mr under parent ID: 3295
Successfully created and pushed to https://new.instance.localhost/mloops/devops-card/devops-Mr.git
Additional Options:
--token TEXT
The GitLab Private Token for CI/CD--output-file
to specify the JSON file for saving repo information.--input-file
to specify the JSON file for reading repo information.--clean-all
to remove all existing repos before download.
Contributing
All contributions are welcome! Please refer to the CONTRIBUTING.md for guidelines.
License
MIT Licensed. See LICENSE for full details.
Author
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
g2g-0.1.4.tar.gz
(6.1 kB
view details)
Built Distribution
g2g-0.1.4-py3-none-any.whl
(7.0 kB
view details)
File details
Details for the file g2g-0.1.4.tar.gz
.
File metadata
- Download URL: g2g-0.1.4.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.10.12 Linux/6.2.0-36-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4937940b4f26f0abd10ad8a8458ed1cad6e2a433a8cfa30b7869b869c7a100f2 |
|
MD5 | 2187a7ebea5e782f3bdcee68a15df896 |
|
BLAKE2b-256 | ed599797eca588582be215d9ca758ffd39643050eb0ee43d42ecd14b1e12357a |
File details
Details for the file g2g-0.1.4-py3-none-any.whl
.
File metadata
- Download URL: g2g-0.1.4-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.10.12 Linux/6.2.0-36-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b50533f18cfe5a33dd19bdb5b468a56c03a4590b49407a8a7878a620903f819b |
|
MD5 | 8bf3aca079849d07629b047ad1abe9a7 |
|
BLAKE2b-256 | 940932216dbc7172b6dc99fed4a5fdc667222948fb87dae0e5baa75f66e5a4ca |