{"id":16689800,"url":"https://github.com/schrepfler/gitlab-migrator","last_synced_at":"2026-05-18T03:33:43.921Z","repository":{"id":73786003,"uuid":"542116758","full_name":"schrepfler/gitlab-migrator","owner":"schrepfler","description":"GitLab Migrator is a java application which can be used to migrate GitLab groups into an GitHub organisation and keep locally checkout out groups in sync with upstream.","archived":false,"fork":false,"pushed_at":"2023-11-21T01:25:05.000Z","size":38,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-04T00:43:52.027Z","etag":null,"topics":["gitlab","gitlab-migrated","gitlabmigration"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schrepfler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-09-27T14:04:45.000Z","updated_at":"2023-09-17T20:57:05.000Z","dependencies_parsed_at":"2023-11-21T02:28:35.495Z","dependency_job_id":"0c81c07b-3bd0-4f61-a38d-3fb5a5c6436e","html_url":"https://github.com/schrepfler/gitlab-migrator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/schrepfler/gitlab-migrator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schrepfler%2Fgitlab-migrator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schrepfler%2Fgitlab-migrator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schrepfler%2Fgitlab-migrator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schrepfler%2Fgitlab-migrator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schrepfler","download_url":"https://codeload.github.com/schrepfler/gitlab-migrator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schrepfler%2Fgitlab-migrator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33163747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T22:39:12.733Z","status":"online","status_checked_at":"2026-05-18T02:00:06.436Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gitlab","gitlab-migrated","gitlabmigration"],"created_at":"2024-10-12T15:49:21.400Z","updated_at":"2026-05-18T03:33:43.905Z","avatar_url":"https://github.com/schrepfler.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitLab Migrator\n\nGitLab Migrator is a Java application which can be used primarily to map and migrate GitLab groups into a GitHub organisation.\nYou can also use it to keep GitLab repositories synced up locally and eventuall it'll be able to keep your GitLab and GitHub in sync.\n\n### TODO badges\n\n## Installation\n\nTODO Needs implementing CI/CD for binaries and publish.\n\n```bash\n...\n```\n\n## Usage\n\nGitlab Migrator consists of the following commands\n\n### Init\n\nThis command will fetch the GitLab group, subgroups and repository information locally, will scan the GitHub organisation and then save this information.\n\n```shell\ngitlab-migrator init  --group-id-or-path=\u003cgroupIdOrPath\u003e\n                      --gitlab-access-token=\u003cgitlabAccessToken\u003e\n                      --github-organization=\u003cgithubOrganization\u003e\n                      --github-personal-access-token=\u003cgithubAppInstalationToken\u003e\n                      [--migrator-db-file=\u003cmigratorDbFile\u003e]\n```\n\n### Export\n\nThis command will clone the gitlab repositories locally.\n\n```shell\ngitlab-migrator export  --target-directory=\u003ctargetDirectory\u003e\n                        --group-id-or-path=\u003cgroupIdOrPath\u003e\n                        --gitlab-access-token=\u003cgitlabAccessToken\u003e\n                        --expanded=\u003cexpanded|false\u003e\n                        --enable-gitlab-logging=\u003cenableGitLabLogging|false\u003e\n```\n\n### WIP Map Organisation\n\n### WIP Migrate\n\n```shell\n \ngitlab-migrator migrate --github-organization=\u003cgithubOrganization\u003e\n                        --github-personal-access-token=\u003cgithubAppInstalationToken\u003e\n                        --gitlab-personal-access-token=\u003cgitlabPersonalAccessToken\u003e\n                        --group-id-or-path=\u003cgroupIdOrPath\u003e\n                        [--mapping-file=\u003cmappingFile\u003e]\n                        [--target-directory=\u003ctargetDir\u003e]\n                        [--delete-organization-projects]\n```\n\nWhen executing the tool you'll go through two phases. \n- In the first go, the tool will create a file (default value `repo-mappings.json`)\nwhich will be populated with a map of all repositories in the origin GitLab group at which point it will stop.\nYou can now modify that map and customise the title of the target repository as GitHub does not have support for groups \nand sub-groups so this is a good moment to establish a naming convention.\n- In the second run, the tool should start cloning locally the repositories in the `target-directory` location and once\n  finished it should start creating repositories in the target GitHub organisation and pushing the local repos \n  (including branches and tags) into them.\n  - In case of errors during processing the `mirrorStatus` will move from `TODO` to `ERROR` or in case of hitting the\n  GitHub API rate limit `RATE_LIMIT_HIT_DELAYED`. Once you understand the error or the rate limit has expired you can  \n  move the `mirrorStatus` back in `TODO` and the application will retry the repositories which are in `TODO` state. \n  In that case it will skip the `PUSHED` or errored repositories and will also refresh the list in the case there are\n  newly added repositories in the GitLab group.\n- There's a nuclear option to nuke all GitHub organisation repositories if for some reason you want to refresh the\nrepositories as we don't support sync between remotes. Contributions are welcome. Use at own responsibility!\n\n```json\n{\n  \"repoMappings\" : {\n    \"123456788\" : {\n      \"id\" : 123456788,\n      \"origin\" : \"top-group/sub-group/fancy-app\",\n      \"title\" : \"TOPGROUP SUBGROUP fancy-app\",\n      \"mirrorStatus\" : \"TODO\"\n    },\n    \"123456789\" : {\n      \"id\": 123456789,\n      ...\n    }\n...\n```\n\n## Build\n\nCreating the release files locally can be performed using\n```shell\nmvn clean install jreleaser:assemble\n```\n\n\n## Contributing\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nPlease make sure to update tests as appropriate.\n\n## License\n[Apache-2.0](https://spdx.org/licenses/Apache-2.0.html)\n\n## Roadmap\n- Add and Validate support for hosted GitLab CE\n- Track upstream repos and push updates.\n- Handle adding users to organisation.\n- Handle existing target repo.\n- Not sure if description is migrated?\n- Support multiple commands.\n- Make it more robust.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschrepfler%2Fgitlab-migrator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschrepfler%2Fgitlab-migrator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschrepfler%2Fgitlab-migrator/lists"}