Frankfurt and Amsterdam regions are live — request a quote today.
api @ 87 ms

Gitshelf

git mirrors self-hosted

15-35
10-20
5-12
Gitshelf
1-4
Gitshelf
<2
6
7

CLI
cURL
$ gitshelf auth login
✓ signed in as ops@acme.dev
$ gitshelf mirror create github.com/acme/api --region fra
✓ cloned 214 branches · 1,032 tags · LFS 3.1 GB
✓ mirror mir_8f2k synced · lag 0.4s
$ gitshelf mirror ls
acme/api github synced 2m ago fra
$ gitshelf restore mir_8f2k --to gitlab.com/acme/api
✓ restored 214 refs in 41s · integrity verified
$ curl -X POST https://api.gitshelf.dev/v1/mirrors \
-H "Authorization: Bearer $GITSHELF_TOKEN" \
-d '{"source":"github.com/acme/api","region":"fra"}'
{"id":"mir_8f2k","status":"syncing"}
$ curl https://api.gitshelf.dev/v1/mirrors/mir_8f2k \
-H "Authorization: Bearer $GITSHELF_TOKEN"
{"id":"mir_8f2k","status":"synced","lag_seconds":0.4}
$ helm repo add gitshelf https://charts.gitshelf.dev
$ helm install gitshelf gitshelf/gitshelf -f values.yaml
✓ gitshelf-core ready
✓ gitshelf-worker ready (3/3)
$ gitshelf config set endpoint https://git.acme.internal
$ gitshelf mirror create gitlab.acme.internal/platform/api
✓ mirrored to your own S3 bucket · BYOK enabled
$ curl -X POST https://git.acme.internal/v1/mirrors \
-H "Authorization: Bearer $GITSHELF_TOKEN" \
-d '{"source":"gitlab.acme.internal/platform/api"}'
{"id":"mir_c41d","status":"syncing"}
# same API, runs entirely inside your network