匿名参加 OK のミニマル Git ホスティング。 ブラウザでリポジトリを閲覧し、Smart HTTP で clone / fetch / push できます。
Anonymous-friendly minimal Git hosting. Browse repositories in the browser and clone/fetch/push via Git Smart HTTP.
GIT_PROJECT_ROOT/<bucket>/<owner>配下の bare リポジトリ(*.git)を一覧表示:GET /repos- リポジトリのツリー表示・ファイル閲覧:
GET /<owner>/<repo>/tree?ref=... - bare リポジトリの作成 API:
POST /api/repos - Git Smart HTTP(clone/fetch/push):
http://localhost:3000/<owner>/<repo>またはhttp://localhost:3000/<owner>/<repo>.git
- Node.js / npm
gitコマンド(git http-backendを利用)- 環境変数
GIT_PROJECT_ROOT(bare リポジトリを置くルートディレクトリ)
npm install$env:GIT_PROJECT_ROOT="C:\path\to\git-project-root"
npm run devexport GIT_PROJECT_ROOT="/path/to/git-project-root"
npm run devブラウザで http://localhost:3000/repos を開くと一覧が表示されます。
- 一覧:
GET /repos - リポジトリトップ:
GET /<owner>/<repo>(デフォルトブランチへリダイレクト) - ツリー/ファイル:
GET /<owner>/<repo>/tree/<path>?ref=<branch|sha>
git clone http://localhost:3000/<owner>/<repo>UI から作成したリポジトリは http.receivepack=true を自動設定します。
既存の bare リポジトリを手動で置いた場合、push を許可するには以下を実行してください。
git -C /path/to/<repo>.git config http.receivepack true- Git クライアントからの Smart HTTP リクエスト(
/info/refs,/git-upload-pack,/git-receive-pack,/objects,/HEAD)のみ、proxy.tsでGET/POST /<owner>/<repo>(.git)/...を内部ルートGET/POST /git/<owner>/<repo>/...にリライトします(実体はapp/git/[owner]/[repo]/[[...path]]/route.ts)。 - 通常のページ遷移(例:
GET /<owner>/<repo>)はリライトされません。
GET /health->{ ok: true }GET /api/repos->{ repos: { owner: string; name: string; dir: string; defaultBranch: string }[] }POST /api/reposbody:{ "name": "my-repo" }->{ ok: true, owner: "anonymous", name: "my-repo" }
GIT_PROJECT_ROOT(必須): bare リポジトリ(*.git)を置くディレクトリ- 例:
GIT_PROJECT_ROOT/<bucket>/anonymous/<repo>.git <bucket>はリポジトリを分散配置するための区分で、現状は00が使われます
- 例:
GIT_HTTP_EXPORT_ALL(任意): 未設定時は"1"を使用します
現状は匿名ユーザーのみで、作成先 owner は anonymous 固定です。
将来的に /<owner>/<repo> 形式で複数 owner を扱えるようにする前提で設計しています。
- 認証・認可は未実装です(開発用途向け)。
GIT_PROJECT_ROOT配下のパス解決は検証していますが、公開環境で運用する場合は十分に注意してください。