Files
GitOcean-Old/README.md
T
2026-06-08 15:26:06 -05:00

2.6 KiB

Gitocean

Gitocean is a small Go-based Git hosting platform for personal use. It provides a CLI, minimal server-rendered web UI, JSON HTTP API, MySQL metadata storage, and HTTP Smart Git transport. There is no SSH transport.

Quickstart

go run ./cmd/gitocean init
go run ./cmd/gitocean server --config storage/config.json

In another shell:

go run ./cmd/gitocean register
go run ./cmd/gitocean login
go run ./cmd/gitocean repo create demo --public
go run ./cmd/gitocean clone USER/demo

Open the minimal web UI at the server URL, for example:

http://localhost:8080/repos

Web UI routes include /repos, /login, /register, /repos/new, /{username}, /{username}/{repo}, /{username}/{repo}/branches, /{username}/{repo}/commits, /{username}/{repo}/commit, and pull request pages.

Storage

Bare repositories are stored under:

storage/repos/{owner}/{repo}.git

Server config defaults to:

storage/config.json

CLI auth config defaults to:

~/.config/gitocean/config.json

Web UI

The web UI is intentionally minimal and server-rendered. It supports repository search, user profile pages with public repositories, login/register/logout, repository creation, branch selection, a branches page for branch creation/deletion, selected-branch latest commit and commit count status, commit history pages, single commit pages with limited diff rendering, repository file browsing, Markdown rendering, image rendering for common image files, plain-text file viewing, simple textarea-based file editing for users with write access, pull request list/create/view/comment/close/merge workflows, and forking public repositories. Private repositories cannot be forked. Branch renaming is intentionally unsupported in both the API and web UI.

Development

Run checks with:

gofmt -w .
go test ./...
go vet ./...
go test -cover ./...

Optional integration tests:

go test -tags=integration ./...
GITOOCEAN_TEST_MYSQL_DSN='user:pass@tcp(127.0.0.1:3306)/gitocean_test?parseTime=true' go test -tags=integration ./...

Code layout

cmd/gitocean/          thin executable entrypoint
internal/app/          application command dispatch and domain handlers
internal/model/        shared data models
internal/config/       client/server config helpers
internal/dbutil/       MySQL connection helpers
internal/gitutil/      reusable Git command helpers
internal/httputil/     JSON HTTP helpers
internal/backup/       backup/restore helpers
internal/validate/     name and branch validators
plans/                 phase plans