{"id":16733245,"url":"https://github.com/krasjet/grm","last_synced_at":"2026-05-18T08:33:45.900Z","repository":{"id":98566515,"uuid":"279069494","full_name":"Krasjet/grm","owner":"Krasjet","description":"Git repo manager for self-hosted git servers [GitHub mirror]","archived":false,"fork":false,"pushed_at":"2020-12-10T04:34:23.000Z","size":77,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-15T20:14:53.292Z","etag":null,"topics":["git","posix-sh","shell","stagit"],"latest_commit_sha":null,"homepage":"https://krasjet.com/scribbles/grm/","language":"Shell","has_issues":false,"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/Krasjet.png","metadata":{"files":{"readme":"README","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":"2020-07-12T13:24:47.000Z","updated_at":"2023-05-23T10:21:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"30be8670-1b5d-4f1a-89e7-4c77f8e8b7ef","html_url":"https://github.com/Krasjet/grm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Krasjet/grm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Krasjet%2Fgrm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Krasjet%2Fgrm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Krasjet%2Fgrm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Krasjet%2Fgrm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Krasjet","download_url":"https://codeload.github.com/Krasjet/grm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Krasjet%2Fgrm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33170864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T05:43:36.989Z","status":"ssl_error","status_checked_at":"2026-05-18T05:43:19.133Z","response_time":71,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","posix-sh","shell","stagit"],"created_at":"2024-10-12T23:49:12.356Z","updated_at":"2026-05-18T08:33:45.870Z","avatar_url":"https://github.com/Krasjet.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"git repo manager\n================\n\ngrm is a minimal, POSIX-compliant shell script for managing git repositories on\nself-hosted git servers. It is mainly designed to work with git daemon [1] and\nstagit [2], though you don't necessarily need them to run the script.\n\nInstallation\n------------\n\nBefore installing grm, make sure you have set up your git server following the\ninstructions in section 4.4 [3] of Pro Git. Optionally, you should also have\ngit daemon [1] ready for the public access of the repositories, which is\ndocumented in section 4.5 [4] of Pro Git. Your git repositories root should\nhave the following structure:\n\n  $GRM_REPOS_ROOT\n  ├── private-repo.git\n  │   ├── branches\n  │   ├── HEAD\n  │   └── ...\n  ├── public-repo.git\n  │   ├── branches\n  │   ├── HEAD\n  │   ├── ...\n  │   └── git-daemon-export-ok\n  └── unlisted-repo.git\n      ├── branches\n      ├── HEAD\n      ├── ...\n      ├── git-daemon-export-ok\n      └── stagit-no-index\n\nIf you want to have a web interface for your repositories, you should also have\nstagit [2] compiled and installed on your server.\n\nTo use git repo manager, edit the grm script to fill in some configurations,\n\n  # root directory of git repositories\n  GRM_REPOS_ROOT=\"/home/git\"\n\n  # default owner\n  GRM_OWNER=\"yourname\"\n\n  # default url prefix (without ending slash)\n  GRM_URL_PREFIX=\"git://git.domain.tld\"\n\n  # path of the post-receive hooks for stagit\n  GRM_POSTRECV_HOOK=\"/home/git/.post-receive\"\n\n  # root directory of stagit web pages\n  STAGIT_WEB_ROOT=\"/srv/git\"\n\nthen\n\n  $ make install\n\nAn example of the post-receive hook for stagit can be found here [5]. Note that\nthe hook itself needs some further configuration.\n\nUsage\n-----\n\n  $ grm help\n  usage: grm \u003ccommand\u003e [\u003cargs\u003e]\n\n  Git repo manager, manage git repositories on self-hosted git servers.\n\n  commands:\n      new                  create a new repo\n      info repo_name       display metadata of the repo\n      ls                   list all repos\n      ls public            list public repos\n      ls private           list private repos\n      ls unlisted          list unlisted repos\n      rm repo1 [repo2..]   remove repos\n      rc                   recompile stagit index\n      rc repo1 [repo2..]   recompile stagit pages for repos,\n                           and recompile index\n      rca                  recompile all public repos\n      help                 show help\n\nIf you have created a git user for managing git repositories, make sure the git\nuser has write access to all the directories in the config, and run the script\non the server as:\n\n  $ doas -u git -- grm \u003ccommand\u003e [\u003cargs\u003e]\n\nor\n\n  $ sudo -u git -- grm \u003ccommand\u003e [\u003cargs\u003e]\n\nYou could also run the script on your local machine using ssh,\n\n  $ ssh git@domain.tld -- grm \u003ccommand\u003e [\u003cargs\u003e]\n\nor simply create an alias if you find it cumbersome:\n\n  alias grm=\"ssh git@domain.tld -- grm\"\n\nExamples\n--------\n\n$ grm new\nrepo name\n\u003e grmr\nvisibility:\n  1) public\n  2) private\n  3) unlisted (hide from index)\nenter index [default: 1]\n\u003e 1\ndescription [a work in progress]\n\u003e grm redux\nowner [yourname]\n\u003e kst\nclone url [git://domain.tld/grmr]\n\u003e git://git.domain.tld/grmr\nInitialized empty Git repository in /home/git/grmr.git/\nwriting stagit metadata...\nsetting visibility...\ninstalling stagit post-receive hook...\ndone!\n\n$ grm ls\ngrm\ngrmr\n\n$ grm info grmr\nname: grmr\nvisibility: public\ndescription: grm redux\nowner: kst\nurl: git://git.domain.tld/grmr\n\n$ grm rc grmr\n[grmr] recompiling stagit pages...\n[index] rebuilding index...\n[grmr] done!\n[index] done!\nrecompilation done!\n\n$ grm rm grmr\nremove grmr? [y/N] y\n[index] rebuilding index...\n[index] done!\n\n$ grm ls\ngrm\n\nLicense\n-------\n\ngrm is licensed under the MIT license.\n\n[1]: https://git-scm.com/docs/git-daemon\n[2]: https://codemadness.org/git/stagit/\n[3]: https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server\n[4]: https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon\n[5]: https://sink.krj.st/stagit/file/post-receive.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrasjet%2Fgrm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrasjet%2Fgrm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrasjet%2Fgrm/lists"}