Skip to content
CodeQuay

Migration

From GitHub to CodeQuay, with your CI still running

The idea in one line: you push only to CodeQuay, and GitHub becomes a copy that updates automatically after every push. Your GitHub Actions pipelines stay where they are.

Diagram: developers push to CodeQuay, which enforces protections, secret blocking and audit logging; CodeQuay automatically replicates every push to GitHub within seconds; GitHub Actions workflows run on GitHub just as they do today.

How it works

Five steps, zero downtime

Imports and mirrors are managed from the console, or from the command line on the server.

  1. 01

    Authorize the instance key

    On GitHub, add CodeQuay's public key as a deploy key for the repository. The private key never leaves the server.

  2. 02

    Import the repository

    Every branch and every tag, the default branch already protected, indexes ready for fast browsing. If it's interrupted, run it again and it picks up where it left off.

  3. 03

    Check the history for secrets

    The import scans the entire history and reports the type, file, line and commit of every potential secret, without ever showing its value.

  4. 04

    Turn on the GitHub mirror

    From then on, every push CodeQuay accepts is replicated to GitHub within seconds, and GitHub Actions runs just like today.

  5. 05

    Switch the remote. That's it

    For developers it's a single command per clone: the history is identical, nothing to download again.

Import

Bring your full history, and know what's in it

The import copies every branch and every tag (not GitHub pull requests), protects the default branch and scans the entire history for private keys and tokens.

  • Secrets it finds have already been exposed: they need to be rotated, deleting them from the code isn't enough
  • From then on, secret blocking stops new ones from getting back in
  • Safe to re-run: if it's interrupted it resumes and catches up, without overwriting new work
Example of the CodeQuay console importing a repository from GitHub: import completed with 14 branches and 38 tags; the history scan found 2 potential secrets to rotate, listed by file, line and commit, without showing their value.
Example of the CodeQuay console, a repository mirror to GitHub: in sync, last successful sync 40 seconds ago, with the toggle on and a Sync now button.

Mirror to GitHub

Your CI stays put, for as long as you want

New and updated branches, new tags, deleted branches: everything is replicated to GitHub a few seconds after the push to CodeQuay.

Whenever you're ready, your workflows can move to CodeQuay Actions, with the same syntax as GitHub Actions. CodeQuay Actions

  • Workflows run just like today

    Replicated pushes are real pushes to the GitHub repository, so they trigger your on: push workflows.

  • Secrets and environments stay on GitHub

    No CI configuration to move before you get started.

  • If GitHub doesn't respond, CodeQuay retries

    With increasing back-off, and it alerts admins on the first failure and again on recovery. Developers' pushes aren't affected.

  • GitHub becomes a copy

    You push only to CodeQuay; with a ruleset on GitHub, only CodeQuay's deploy key can write.

For developers

One command, then back to coding

Branches, tags, commits and hashes stay the same. Only the remote URL changes, and from then on protections, secret blocking and the audit log work for you.

Coming from another platform? It's standard git: a git push --mirror is all it takes. And you can leave the same way, with a git clone --mirror.

in an existing clone
Commands for developers: point the remote to CodeQuay over HTTPS or SSH, then run git fetch.
# HTTPS (with a CodeQuay personal token)$ git remote set-url origin https://git.codequay.it/acme/portale/api.git# or SSH (with a key registered in the console)$ git remote set-url origin ssh://git@git.codequay.it:2222/acme/portale/api.git$ git fetch origin
from another git platform
Commands to migrate from another platform: mirror clone, remove the refs/pull references, mirror push to CodeQuay.
$ git clone --mirror https://current-server.example/acme/api.git$ cd api.git# only if present: drop the pull request refs$ git for-each-ref --format='delete %(refname)' refs/pull |    git update-ref --stdin$ git push --mirror https://git.codequay.it/acme/portale/api.git

Ready to bring your repositories to CodeQuay?

Create your account, start free and begin with an import. Want to know if it's right for your team, or need a dedicated instance? Get in touch.