{"id":19655815,"url":"https://github.com/ryanpcmcquen/github_to_gitlab_syncer","last_synced_at":"2026-04-26T20:32:09.493Z","repository":{"id":45154808,"uuid":"184344659","full_name":"ryanpcmcquen/github_to_gitlab_syncer","owner":"ryanpcmcquen","description":"Sync all your GitHubs to GitLab.","archived":false,"fork":false,"pushed_at":"2023-08-27T19:43:42.000Z","size":30,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-01T19:40:56.851Z","etag":null,"topics":["gitlab","gitlab-syncer","hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryanpcmcquen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-30T23:24:33.000Z","updated_at":"2023-08-21T06:30:11.000Z","dependencies_parsed_at":"2024-11-11T15:25:07.508Z","dependency_job_id":"3d1941d6-3615-4199-bfe4-d15a4210fbc0","html_url":"https://github.com/ryanpcmcquen/github_to_gitlab_syncer","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ryanpcmcquen/github_to_gitlab_syncer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanpcmcquen%2Fgithub_to_gitlab_syncer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanpcmcquen%2Fgithub_to_gitlab_syncer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanpcmcquen%2Fgithub_to_gitlab_syncer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanpcmcquen%2Fgithub_to_gitlab_syncer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanpcmcquen","download_url":"https://codeload.github.com/ryanpcmcquen/github_to_gitlab_syncer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanpcmcquen%2Fgithub_to_gitlab_syncer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32312255,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T19:15:34.056Z","status":"ssl_error","status_checked_at":"2026-04-26T19:15:15.467Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-syncer","hacktoberfest"],"created_at":"2024-11-11T15:23:57.656Z","updated_at":"2026-04-26T20:32:09.477Z","avatar_url":"https://github.com/ryanpcmcquen.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# github_to_gitlab_syncer\n\nSync all your GitHubs to GitLab.\n\n### This now requires a premium plan.\n\nHey there!\n\nMaybe you are like me, and are weary of where GitHub is headed, but cannot completely divest, since having a GitHub account has many perks (it is nearly essential for logging in to/using some really nifty dev tools). It is also a great place for people to discover your work. BUT, since GitLab has some incredible mirroring options, you may as well stick all your work over there, and give anyone else weary of GitHub a 'second option' for enjoying your work. This set of simple scripts will allow you to do just that.\n\nThe first script you should start with, is [`SYNC_ANY_GITHUBS_NOT_ON_GITLAB.js`](SYNC_ANY_GITHUBS_NOT_ON_GITLAB.js), once you fill in your `.SECRETS` file, run:\n\n```\nnode SYNC_ANY_GITHUBS_NOT_ON_GITLAB.js\n```\n\nThe script will compare what you have on GitHub and GitLab, and sync anything not on GitLab _from_ GitHub. It even does some name sanitation, as GitLab's GUI import process will occasionally take some liberties with naming.\n\n---\n\nOh, and if you plan to have GitHub be your 'source of truth', you should also run this:\n\n```\nnode FIX_MIRROR_SETTINGS_FOR_ALL_GITLABS.js\n```\n\nThis will change the `mirror_overwrites_diverged_branches` setting to `true` for all your GitLab repos, meaning if things get borked, they get overwritten from GitHub.\n\nAnd that `.SECRETS` thing should look kinda like this:\n\n```js\nmodule.exports = {\n    gitHubToken: \"LONG_ASS_TOKEN\",\n    gitLabToken: \"NOT_AS_LONG_OF_A_TOKEN\",\n    gitHubUser: \"YOUR_NAME_BRO\",\n    gitLabUser: \"YOUR_NAME_BRA\",\n};\n```\n\n---\n\n:warning: DANGER ZONE :warning:\n\nIf you haven't kept GitLab clean, you can start with a _blank slate_, by running:\n\n```\nnode DELETE_ALL_GITLAB_REPOS.js\n```\n\n**WARNING**, this will delete everything there, so please, USE IT AT YOUR OWN RISK!\n\nWell, actually it will delete a page worth of repos at a time, which means about 30 at a time. So you'll have to run it multiple times to delete everything. This is by design in case you run it on accident. The other scripts recurse to cover all of your repos/projects.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanpcmcquen%2Fgithub_to_gitlab_syncer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryanpcmcquen%2Fgithub_to_gitlab_syncer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanpcmcquen%2Fgithub_to_gitlab_syncer/lists"}