Alpha Early access for a handful of users
Git hosting that stays out of your way.
git.bvdl.io is a small, plain Git host. Push with the client you already have, open pull requests, review and merge — and nothing else asking for your attention.
Free while in alpha. Access is invitation-only, with manual approval. No account needed to browse public repositories — explore what’s here.
Alpha in numbers
Updated hourly · Updated
- Repositories
- 39
- Commits hosted
- 438
- Registered users
- 2
- Pushes in the last 7 days
- 0
Totals across public and private repositories. Commits include imported history, counted once per repository after indexing. Totals can decrease when data is deleted.
See it work
Three stages, played on their own. Pick one to jump straight to it.
Nothing new to learn. Ordinary Git over HTTPS with an unmodified client, and repositories, branches, issues and pull requests where you already expect them to be.
A pull request merges when it can, and says so plainly when it cannot. Settle a conflicting change from the browser: read both sides, keep the lines you want, commit the resolution and merge.
Review changed files, leave inline comments, approve or request changes, and react — across collaborators, teams and organisations.
| app | Add harbour manifest and boot script | just now | |
| config | Read the port from the environment | 2 hours ago | |
| tests | Cover the boot sequence | yesterday | |
| .gitignore | Initial commit | 3 days ago | |
| README.md | Describe the boot script | yesterday | |
| composer.json | Initial commit | 3 days ago |
harbour
A small service that keeps a fleet of boats where they are supposed to be. Run bin/boot and point it at a manifest.
About
Keeps a fleet of boats where they are supposed to be.
0 stars · 0 forks
Clone
Languages
PHP 92% · Shell 8%
mara / harbour / Pull requests / #12
Add rate limiting to the API #12
This branch has conflicts that must be resolved. Both branches changed the same parts of 1 file.
config/api.phpconflicting changes
No conflicts with main. Merging creates a merge commit.
4 commits merged into main as b81c4e2.
Reviews
No reviews yet.
Commits
Labels
enhancementFiles changed
+31 −3 in 3 files
mara / harbour / #12 / Resolve conflicts
Resolve conflicts
For every conflict, keep the lines from feature/rate-limit (this pull request), the lines
from main, or both. The result is committed to feature/rate-limit.
Conflicting files 1
0 of 1 resolved Commit resolution to feature/rate-limit| return [ | |
| 'throttle' => [ | |
| Keep feature/rate-limit Keep main Keep both Undo | |
| feature/rate-limit (this pull request) | |
| + 'per_minute' => (int) env('API_RATE_LIMIT', 120), | |
| main | |
| + 'per_minute' => 60, | |
| 'decay_seconds' => 60, | |
| ], | |
| ]; | |
mara / harbour / Pull requests / #12
Add rate limiting to the API #12
| @@ -14,7 +14,15 @@ class ThrottleApi | |
| 14 | public function handle(Request $request, Closure $next): Response |
| 15 | { |
| 16 | − return $next($request); |
| 16 |
+ |
|
Add comment
Cancel
Read this from
👍 1
Good call. Moved to config in
Reply
Resolve conversation
|
|
| 17 | + |
| 18 | + if ($this->limiter->tooManyAttempts($request->ip(), $limit)) { |
| 19 | + return response()->json(['message' => 'Too many requests.'], 429); |
| 20 | + } |
| 21 | + |
| 22 | + $this->limiter->hit($request->ip()); |
| 23 | + |
| 24 | + return $next($request); |
| 25 | } |
Quick start
Your first push, after your invitation.
No custom client, no special tooling. A repository here is a remote like any other, and ordinary Git is the whole workflow.
-
Join the waiting list
Alpha access is invitation-only. Requests are reviewed manually; if approved, you will receive an invitation by email. There is no guaranteed wait time.
-
Create your account and an empty repository
Follow your invitation to register, then create a public or private repository without a README, license or .gitignore. Generate a personal access token with read and write access for your push.
-
Push from your terminal
Choose the instructions for a new project or an existing repository. Use the HTTPS clone URL shown on your repository page.
-
Bring the others in
Add collaborators, open a pull request, review it and merge — from the browser, in the same place.
Install Git and configure your commit name and email with git config --global user.name
and git config --global user.email followed by your own values.
In either example, replace https://git.bvdl.io/you/project.git with your empty repository’s HTTPS clone URL.
New project
Run these commands in an empty local directory. They create a README and the first commit on main.
git init -b main printf '# My project\n' > README.md git add README.md git commit -m "Initial commit" git remote add origin https://git.bvdl.io/you/project.git git push -u origin main
Existing repository
Run from your local repository with a branch checked out and at least one commit.
This pushes only the current branch, keeping its name and any existing origin remote.
It adds a remote named sovereign; if that name is already in use, choose an unused name in both commands.
git remote add sovereign https://git.bvdl.io/you/project.git git push -u sovereign HEAD
Authenticating the push. Git asks for a username and a password the first time you push. Enter your git.bvdl.io username as the username, and a personal access token as the password — your account password will not work.
After signing up, generate a token with read and write access under Settings → Personal access tokens, then paste it when Git asks for the password.
What's included
The core of a Git host, without the parts that get in the way.
-
Standard Git over HTTPS
Clone, fetch, pull and push with an unmodified Git client, authenticated with a personal access token.
-
Issues & Pull Requests
Track work against a repository and compare branches before merging.
-
Code Review
Read changed files, leave inline comments, approve or request changes.
-
Releases & Webhooks
Publish releases with assets and notify other systems on repository events.
-
Unlimited repository count
Create as many public and private repositories as you need. Storage quotas and limits on push size and processing time still apply.
-
JSON REST API
Automate everything with a token-authenticated REST API covering repositories, issues and pull requests.
Read this first
Before you join: this is an alpha
git.bvdl.io is early and unfinished. Using the alpha means accepting that:
- Your data can be wiped. Resets delete repositories and accounts without notice, and there are no backups you can rely on.
- Everything is measured and reviewed. Your repositories — private ones included — and your usage analytics are read by the people building the platform.
- The server is small. Pages can be slow, and large pushes or clones can time out.
- Almost nobody is here yet. The alpha is a handful of users, so the site is quiet and lightly tested.
Want to try the alpha?
Join the waiting list for manual review. If approved, you will receive an invitation by email to create your account.
Throttles unauthenticated API calls per IP address. The limit lives in
config/api.phpso it can be tuned per environment.