Git hosts and publishing
Hop v1.1.4 is forge-neutral. Its core state, workspace, merge, validation, landing, push, and tag workflows use Git itself.
Core Git compatibility
Hop works with:
- GitHub and GitHub Enterprise
- GitLab and self-hosted GitLab
- Gitea and Forgejo
- generic SSH or HTTPS Git servers
- local bare repositories
- projects with no remote, which remain local without error
Hosted CI is optional. Hop validates locally using the command supplied to
hop check or hop land.
Detect the host
hop host
The command reports provider, hostname, owner/repository, selected push remote,
and collaboration adapter. HOP_FORGE=github, gitlab, gitea, or generic
can identify a self-hosted provider whose hostname is not recognizable.
Automatic publication
After successful acceptance, Hop non-force-pushes the accepted commit when the
active branch has an unambiguous destination: its push remote, configured
upstream, origin, or sole remote. Publication never moves the local branch,
index, or visible working tree.
hop push # retry the accepted branch
hop push-tag TAG # publish an existing tag safely
Push failure does not undo local acceptance. Hop records the failure and remote tip. A non-fast-forward result must be reconciled; Hop never force-pushes.
Collaboration adapters
Issues, pull requests, releases, repository creation, and similar forge APIs are optional capabilities:
| Provider | Adapter |
|---|---|
| GitHub | existing authenticated gh CLI |
| GitLab | existing authenticated glab CLI |
| Gitea | embedded compatibility adapter |
| Generic Git | core Git commands only |
Portable command families include hop issues, hop pulls, hop releases,
hop repos, hop actions, hop open, and hop api. Unsupported capabilities
fail clearly without affecting core version control.
Credentials
Use the repository's existing SSH key, OS credential helper, or provider CLI login. Hop and its agent skill forbid creating, listing, rotating, revoking, or pasting access tokens. Never embed a token in a remote URL.
Move a repository
Changing a remote is an explicit publishing-destination change:
git remote set-url origin git@github.com:OWNER/REPOSITORY.git
hop host
hop push
An agent may perform that change only when the user requested it. Preserve the old remote under another name when a migration bridge or rollback may still be needed.