Clone & Push
Moving commits is plain git against the wire. The CLI’s job is to hand you the URLs.
clone-url
dodil git clone-url my-service
# HTTP: https://git.dodil.io/<repo_id>.git
# SSH: [email protected]:<repo_id>.git-o json returns {"http": "…", "ssh": "…"} for scripting. Both URLs address the repo by its repo_id — stable across renames.
Smart-HTTP
The dk_ org API key (issue one here) is the Basic password; the username is ignored:
git clone https://user:[email protected]/<repo_id>.git my-service
cd my-service
git push origin mainFor anything beyond a one-off, keep the key out of the remote URL with a credential helper:
git config --global credential.helper store
git clone https://git.dodil.io/<repo_id>.git my-service
# Username: user (anything)
# Password: dk_XXXX (the API key secret)In CI, inject the key from a secret:
git clone "https://ci:${DODIL_GIT_KEY}@git.dodil.io/${REPO_ID}.git"Public repos clone anonymously — no credential needed for read.
SSH
With a public key uploaded on the console’s SSH Keys page:
git clone [email protected]:<repo_id>.git my-service
git push origin mainA key marked read-only can clone and fetch but any push is rejected on the channel.
Adding Dodil as a remote
For an existing local repo (see the mirror recipe for the full flow):
git remote add dodil https://git.dodil.io/<repo_id>.git
git push dodil --all
git push dodil --tagsWhat the wire enforces
Pushes are checked server-side against your role and the branch’s protection rules: git.viewer credentials and read-only SSH keys cannot push; protected branches reject force-pushes and deletions when configured.
See also
- Auth and Access — issuing keys, roles, read-only keys
- Recipes — Mirror to Dodil — move an existing repo in