Package: g2g
g2g: GitLab to GitLab Group Migratorg2gis a Python CLI utility designed to streamline the process of migrating groups, and subgroups from one GitLab instance to another.FeaturesMigrate 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.InstallationYou can install the package from PyPI:pipinstallg2gUsageBasic usage:The primary commands forg2garedownloadandupload.g2gdownload--api-url"https://gitlab.com/api/v4"--group"mloops"--clean-all
PleaseenteryourGitLabPrivateToken:Removingexistinggroupdirectory:mloops
Cloningdevops-within...
Cloningdevops-brother...
Downloadingsubgroupdevops-card
Cloningdevops-Mr...
Downloadingsubgroupdevops-animal
Cloningdevops-life...
Downloadingsubgroupdevops-home
Cloningdevops-free...
Downloadingsubgroupdevops-recently
Cloningdevops-leave...
Cloningdevops-trouble...
Downloadingsubgroupdevops-time
Cloningdevops-while...
Downloadingsubgroupdevops-girl
Cloningdevops-hotel...g2gupload--api-urlhttps://new.instance.localhost/api/v4--groupmloops
PleaseenteryourGitLabPrivateTokenforthenewinstance:{"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"}}Processingdevops-brotherwithpathparts:['mloops','devops-brother']Groupspecified.Updatedpathparts:['mloops','devops-brother']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingnewproject:devops-brotherunderparentID:3283Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-brother.git
Processingdevops-troublewithpathparts:['mloops','devops-home','devops-recently','devops-trouble']Groupspecified.Updatedpathparts:['mloops','devops-home','devops-recently','devops-trouble']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingorgettinggroup:devops-home
Groupdevops-homecreatedorfetchedwithID:3285Creatingorgettinggroup:devops-recently
Groupdevops-recentlycreatedorfetchedwithID:3286Creatingnewproject:devops-troubleunderparentID:3286Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-home/devops-recently/devops-trouble.git
Processingdevops-leavewithpathparts:['mloops','devops-home','devops-recently','devops-leave']Groupspecified.Updatedpathparts:['mloops','devops-home','devops-recently','devops-leave']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingorgettinggroup:devops-home
Groupdevops-homecreatedorfetchedwithID:3285Creatingorgettinggroup:devops-recently
Groupdevops-recentlycreatedorfetchedwithID:3286Creatingnewproject:devops-leaveunderparentID:3286Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-home/devops-recently/devops-leave.git
Processingdevops-freewithpathparts:['mloops','devops-home','devops-free']Groupspecified.Updatedpathparts:['mloops','devops-home','devops-free']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingorgettinggroup:devops-home
Groupdevops-homecreatedorfetchedwithID:3285Creatingnewproject:devops-freeunderparentID:3285Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-home/devops-free.git
Processingdevops-whilewithpathparts:['mloops','devops-time','devops-while']Groupspecified.Updatedpathparts:['mloops','devops-time','devops-while']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingorgettinggroup:devops-time
Groupdevops-timecreatedorfetchedwithID:3290Creatingnewproject:devops-whileunderparentID:3290Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-time/devops-while.git
Processingdevops-hotelwithpathparts:['mloops','devops-time','devops-girl','devops-hotel']Groupspecified.Updatedpathparts:['mloops','devops-time','devops-girl','devops-hotel']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingorgettinggroup:devops-time
Groupdevops-timecreatedorfetchedwithID:3290Creatingorgettinggroup:devops-girl
Groupdevops-girlcreatedorfetchedwithID:3292Creatingnewproject:devops-hotelunderparentID:3292Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-time/devops-girl/devops-hotel.git
Processingdevops-withinwithpathparts:['mloops','devops-within']Groupspecified.Updatedpathparts:['mloops','devops-within']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingnewproject:devops-withinunderparentID:3283Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-within.git
Processingdevops-lifewithpathparts:['mloops','devops-card','devops-animal','devops-life']Groupspecified.Updatedpathparts:['mloops','devops-card','devops-animal','devops-life']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingorgettinggroup:devops-card
Groupdevops-cardcreatedorfetchedwithID:3295Creatingorgettinggroup:devops-animal
Groupdevops-animalcreatedorfetchedwithID:3296Creatingnewproject:devops-lifeunderparentID:3296Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-card/devops-animal/devops-life.git
Processingdevops-Mrwithpathparts:['mloops','devops-card','devops-Mr']Groupspecified.Updatedpathparts:['mloops','devops-card','devops-Mr']Creatingorgettinggroup:mloops
GroupmloopscreatedorfetchedwithID:3283Creatingorgettinggroup:devops-card
Groupdevops-cardcreatedorfetchedwithID:3295Creatingnewproject:devops-MrunderparentID:3295Successfullycreatedandpushedtohttps://new.instance.localhost/mloops/devops-card/devops-Mr.gitAdditional Options:--token TEXTThe GitLab Private Token for CI/CD--output-fileto specify the JSON file for saving repo information.--input-fileto specify the JSON file for reading repo information.--clean-allto remove all existing repos before download.ContributingAll contributions are welcome! Please refer to theCONTRIBUTING.mdfor guidelines.LicenseMIT Licensed. SeeLICENSEfor full details.AuthorLucian BLETAN