{"id":17283547,"url":"https://github.com/roman-kiselenko/smolgit","last_synced_at":"2025-04-14T10:12:10.993Z","repository":{"id":248985187,"uuid":"830141173","full_name":"roman-kiselenko/smolgit","owner":"roman-kiselenko","description":"a minimalist git server","archived":false,"fork":false,"pushed_at":"2024-11-02T10:31:42.000Z","size":736,"stargazers_count":35,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T23:24:49.243Z","etag":null,"topics":["git","git-server","go-gin","go-git","golang","minimalist"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/roman-kiselenko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-17T17:12:22.000Z","updated_at":"2025-03-20T03:35:21.000Z","dependencies_parsed_at":"2024-07-23T20:53:11.561Z","dependency_job_id":"146402a9-28ff-4dc6-b224-7c5a9f253ffc","html_url":"https://github.com/roman-kiselenko/smolgit","commit_stats":null,"previous_names":["roman-kiselenko/smolgit"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roman-kiselenko%2Fsmolgit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roman-kiselenko%2Fsmolgit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roman-kiselenko%2Fsmolgit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roman-kiselenko%2Fsmolgit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roman-kiselenko","download_url":"https://codeload.github.com/roman-kiselenko/smolgit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248860190,"owners_count":21173342,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","git-server","go-gin","go-git","golang","minimalist"],"created_at":"2024-10-15T09:51:36.655Z","updated_at":"2025-04-14T10:12:10.962Z","avatar_url":"https://github.com/roman-kiselenko.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003ca href=\"https://en.wiktionary.org/wiki/smol\"\u003e\u003cimg align=\"left\" src=\"assets/smol-kitten.jpg\" alt=\"a smol cat by Ron whisky\" width=\"150\" height=\"100\" /\u003e\u003c/a\u003e\n\n**smolgit** offers a minimalist [git](https://git-scm.com/) server, making it perfect for small teams or individual developers. Its minimal simple and just works. It's perfect for those who value simplicity and efficiency in their workflow. Small memory footprint, one binary to go.\n\n\u003c!-- toc --\u003e\n- [Features](#features)\n- [Preview](#preview)\n- [Getting Started](#getting-started)\n  - [Install](#install)\n  - [Run](#run)\n  - [Config](#config)\n  - [Docker](#docker)\n- [Prerequisites](#prerequisites)\n- [Built with](#built-with)\n- [Contribution](#contribution)\n\u003c!-- /toc --\u003e\n\n### Features\n\n1. **git operations** - easily perform `pull`, `push`, `clone` and `fetch` operations.\n1. **repository visualization** - browse files, view logs, explore the commit, branch and tag lists.\n1. **user management** - simple user management, add users with `ssh-keys` to `config.yaml`.\n1. **permissions** - assign persmissions to user.\n1. **ligh-dark** - web theme based on your system settings.\n1. **basic-auth** - web basic auth middleware.\n\n### Preview\n\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"assets/web_1.png\" alt=\"screenshot\" width=\"700\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"assets/web_2.png\" alt=\"screenshot\" width=\"700\" /\u003e\n\u003c/p\u003e\n\n\n### Getting Started\n\n#### Install\n\n1. Download binary from [ release page ](https://github.com/roman-kiselenko/smolgit/releases).\n1. Generate default `config.yaml` file with command `./smolgit config \u003e config.yaml`.\n    - Use [`yq`](https://github.com/mikefarah/yq) for inline changes `./smolgit config | yq '.server.disabled = true' \u003e config.yaml`\n1. Run `./smolgit`\n\n```shell\n$\u003e ./smolgit\n10:08AM INF set loglevel level=DEBUG\n10:08AM INF version version=main-a4f6438\n10:08AM INF initialize web server addr=:3080\n10:08AM INF initialize ssh server addr=:3081\n10:08AM INF start server brand=smolgit address=:3080\n10:08AM INF starting SSH server addr=:3081\n```\n\n#### Config\n\nGenerate default `config.yaml` file with command `./bin/smolgit config \u003e config.yaml`.\n\n```yaml\nlog:\n  # Color log output\n  color: true\n  # Log as json\n  json: false\n  # Log level (INFO, DEBUG, TRACE, WARN)\n  level: DEBUG\nserver:\n  # Disable web server\n  disabled: false\n  # Enable basic http auth\n  auth:\n    enabled: false\n    # Credentials for basic auth\n    accounts:\n      - login: user2\n        password: bar\n      - login: user1\n        password: foo\n  # Web server address\n  addr: \":3080\"\n  # Navbar brand string\n  brand: \"smolgit\"\nssh:\n  # SSH server address\n  addr: \":3081\"\ngit:\n  # Folder to save git repositories\n  path: /tmp/smolgit\n  # Base for clone string formating\n  # (e.g. ssh://git@my-git-server.lan/myuser/project.git)\n  base: \"git@my-git-server.lan\"\n  users:\n    # User name used for folder in git.path\n  - name: \"bob\"\n    # Permissions, wildcard or regex\n    # User to check access for other repositories\n    # '*' - access for all repositories\n    # 'admin' - access for admin's repositories\n    # '(admin|billy)' - access for admin's and billy's repositories\n    permissions: \"*\"\n    keys:\n    - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCq9rD9b8tYyuSLsTECHCn... developer@mail.com\n```\n\ncli options:\n\n```shell\n$\u003e ./smolgit --help\nUsage of ./smolgit:\n  -config string\n        path to config (default \"./config.yaml\")\n```\n\n#### Docker\n\nIn order to run `smolgit` in docker there is the [`Dockerfile`](/Dockerfile).\n\n1. Build image `make build-docker`\n1. Generate `config.yaml` file `make config-docker`, it'll create `config.yaml` in the current directory and mount it for docker.\n1. Run `smolgit` in docker:\n\n```shell\n$\u003e make run-docker\ndocker run -it -p 3080:3080 -p 3081:3081 -v /path-to-smolgit-project/smolgit/:/etc/smolgit smolgit\n3:53PM INF set loglevel level=DEBUG\n3:53PM INF version version=dev\n3:53PM INF initialize web server addr=:3080\n3:53PM INF initialize ssh server addr=:3081\n3:53PM INF start server brand=smolgit address=:3080\n3:53PM INF starting SSH server addr=:3081\n```\n\n### Prerequisites\n\n- git\n\n### Built with\n\n:heart:\n\n- [golang](https://go.dev/)\n- [gin](https://github.com/gin-gonic/gin)\n- [go-git](https://github.com/go-git/go-git)\n- [pico](https://picocss.com/docs)\n- [gossh](https://github.com/gliderlabs/ssh)\n\n### Local development\n\n- [golang](https://go.dev/)\n- [yq](https://mikefarah.gitbook.io/yq)\n- [bats](https://bats-core.readthedocs.io/en/stable/)\n\n### Contribution\n\nContributions are more than welcome! Thank you!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froman-kiselenko%2Fsmolgit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froman-kiselenko%2Fsmolgit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froman-kiselenko%2Fsmolgit/lists"}