Bring an existing Git repository onto UnityFreak by URL — full history included.
Importing a repository mirror-clones its full Git history — every commit, branch, and tag — directly from the source URL you provide. That history is exactly what you get: a complete, working clone you can push and pull from immediately.
What does not come across is anything that lives outside the Git history itself: issues, pull or merge requests, and branch protection rules all stay on your old host. If you rely on any of those, plan to recreate the ones you still need on UnityFreak — there is no automated migration for them today.
The same goes for everything else a host keeps outside the Git history: wikis, releases and release assets, webhooks, CI/CD configuration, secrets and deploy keys, and collaborators, teams and permissions. The migration readiness report (see After the Import) lists these so nothing is forgotten.
Even for a public repository, generating a token avoids the source host's anonymous rate limits during the clone. For a private repository, it's required. A token scoped to read-only access is all the import needs.
GitHub → Settings → Developer settings → Personal access tokens. A token scoped to read the repository is enough.
GitLab → User Settings → Access Tokens, with the read_repository scope.
Bitbucket → Personal settings → App passwords, with Repositories: Read permission.
From Repositories → Import Repository, fill in:
https://host/owner/repo.git).If the source is private, check "This is a private source (requires credentials)" and enter the username and the token you generated above as the password. Those credentials are used to perform the clone and, over https, to copy the repository's private LFS objects from the same source. They are kept encrypted for at most 6 hours so the background copy can use them, and are never stored in our database — only the repository's URL (with credentials stripped) is kept on the import record. If the source is plain http, credentials are never sent and private LFS objects cannot be copied.
Point your local clone at the new remote and keep working exactly as before:
git remote set-url origin https://unityfreak.com/{owner}/{repo}.gitPush and pull continue working exactly as they did against the old host — nothing else about your local workflow changes.
The import only carries over Git history first — the initial clone contains LFS pointer files, not the LFS bytes themselves. A background job copies those objects from the original source right after the Git history lands, and the repository reports exactly where it is:
Until the status reads Complete, keep using the original repository as your source of truth. You can follow it from the repository's Settings → LFS tab. If the copy ends Partial, an admin can fix the cause and press "Retry LFS copy" there — when the source needs credentials, the retry asks for a username and access token, which are handled the same way as at import time.
While the import runs, and again from the repository's Settings → LFS tab and (once the copy has finished) its home page, UnityFreak shows a migration readiness report. It gives a Pass or Fail for each of:
A fourth entry, unsupported metadata, is a Review item rather than a pass or fail, because UnityFreak cannot see what your old host stores outside Git: it lists what to recreate. Each failing or running category comes with explicit next steps. Only when the first three all pass does the report say the repository is ready to be your primary remote, and then it shows the git remote set-url command to switch your local clone.