irongit

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

  1. Open New → Import from GitHub.
  2. Choose Connect GitHub to import your own account, private repositories included, or type any GitHub user or organization (optionally with a token).
  3. 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 12

ig 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.