Import from GitHub
Bring a GitHub user or organization over in one go. The import runs on the server, one repository at a time, so you can close the page and come back to watch the progress.
From the browser
- Open New → Import from GitHub.
- Choose Connect GitHub to import your own account, private repositories included, or type any GitHub user or organization (optionally with a token).
- Tick the repositories you want (forks start unticked), pick where they go and their visibility, and start.
From the terminal
ig import github octocat # every repo except forks
ig import github my-org --to my-irongit-org # into an organization
ig import github me --repo api --repo web # just these two
ig import github me --visibility private --profile
ig import list
ig import watch 12ig uses --token, then $GITHUB_TOKEN or $GH_TOKEN, then your GitHub CLI login (gh auth token). Add --public-only to ignore all of them.
What comes over
- Every branch and tag, with full history. Pull request refs and GitHub-only data (issues, wikis, releases) do not.
- Git LFS files, copied from GitHub's LFS storage and checked against their checksums.
- Description, default branch and archived state. Visibility follows GitHub unless you choose all private or all public.
- With Copy profile: name, bio, location, website and avatar, but only where yours are empty. Anything already set on irongit is left alone.
Your commit history
Commits count on your heatmap when they reach a default branch and their author email is one of your verified emails. When you import your own account with your own GitHub token (or Connect GitHub), irongit adds your GitHub-verified emails, including the users.noreply.github.com address GitHub commits through its web editor use, so your history shows up right away.
Private repositories and tokens
Without a token only public repositories are visible. A token or Connect GitHub adds private ones. GitHub's OAuth apps can only ask for full repo access to read private code; irongit uses that token for the import alone, keeps it in memory only and revokes it when the import ends. A personal access token you paste is never stored either.
Limits and skips
- A repository whose name already exists in the target is skipped and left untouched, so re-running an import is safe.
- Repositories with files over the size limit anywhere in their history are refused, with the file names. Move those files to Git LFS on GitHub (
git lfs migrate import) and import again. - Storage quotas apply; a repository that would not fit is refused before anything is written.
- One import runs at a time per person. A server restart interrupts it; start it again and finished repositories are skipped.