{"id":22662770,"url":"https://github.com/themitosan/grpp","last_synced_at":"2025-07-15T19:06:44.275Z","repository":{"id":265494679,"uuid":"895384250","full_name":"themitosan/grpp","owner":"themitosan","description":"GRPP is a simple tool written in TS that helps preserving git repositories.","archived":false,"fork":false,"pushed_at":"2025-07-01T22:49:49.000Z","size":531,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-01T23:33:20.719Z","etag":null,"topics":["cli","data","git","grpp","linux","preservation","project","repo","repository"],"latest_commit_sha":null,"homepage":"https://themitosan.github.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/themitosan.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,"zenodo":null}},"created_at":"2024-11-28T05:31:24.000Z","updated_at":"2025-07-01T22:49:53.000Z","dependencies_parsed_at":"2024-11-29T16:36:57.177Z","dependency_job_id":"d9837b21-9073-4084-98f6-7c33c787d70e","html_url":"https://github.com/themitosan/grpp","commit_stats":null,"previous_names":["themitosan/grpp"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/themitosan/grpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themitosan%2Fgrpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themitosan%2Fgrpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themitosan%2Fgrpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themitosan%2Fgrpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/themitosan","download_url":"https://codeload.github.com/themitosan/grpp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themitosan%2Fgrpp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265452894,"owners_count":23768032,"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":["cli","data","git","grpp","linux","preservation","project","repo","repository"],"created_at":"2024-12-09T12:15:27.825Z","updated_at":"2025-07-15T19:06:44.267Z","avatar_url":"https://github.com/themitosan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    \u003cimg src=\"GRPP.png\" alt=\"grpp_logo\" width=\"150\"\u003e\u003cbr\u003e\n    Git Repo Preservation Project (GRPP)\n\u003c/h1\u003e\n\nCreated by [TheMitoSan](https://bsky.app/profile/themitosan.bsky.social), this is a tool written in ts that aims to help importing / preserving git repos.\n\n\u003e [!IMPORTANT]\\\n\u003e **GRPP is a tool that only focus on git repos!** If you want to preserve GitHub repos including issues, releases and more - check out [jan9103's github-repo-backuper](https://github.com/Jan9103/github-repo-backuper) or [r-jb's CodeStreisand](https://github.com/r-jb/CodeStreisand).\n\n## Table of contents\n- [Requirements](#requirements)\n- [How to install](#how-to-install)\n- [How to build](#how-to-build)\n    - [Easy mode](#how-to-build-easy)\n    - [Development mode](#build-dev-mode)\n    - [Production mode](#build-production-mode)\n- [How to uninstall](#how-to-uninstall)\n- [How to use](#how-to-use)\n    - [How to import git repos](#how-to-import-git-repos)\n        - [Import single repo](#import-single-repo)\n        - [Import multiple repos](import-multiple-repos)\n    - [Get all repos from a specific user](#get-user-repos)\n    - [How to update repos](#how-to-update)\n        - [Update a single repo](#update-single-repo)\n        - [Update all repos](#update-all-repos)\n- [External tools used on this project](#external-tools)\n- [External code snippets used on this project](#external-code-snippets)\n\n## Requirements\n- `git`, `npm` and `node` packages.\n\nYou can install all required packages by running some of the commands below:\n\n```shell\n# Arch based distros \u003c3\nsudo pacman -Sy nodejs git npm\n\n# Debian based distros\nsudo apt update\nsudo apt install nodejs git\n\n# Fedora based distros\nsudo dnf update\nsudo dnf install nodejs git\n```\n\n\u003e [!IMPORTANT]\n\u003e GRPP uses [`nano`](https://nano-editor.org) as default text editor! If you want to use something else, you can change it by running `grpp --setEditor=[YOUR_COOL_EDITOR]` later.\n\n\u003ca id=\"how-to-install\"\u003e\u003c/a\u003e\n## How to install\n\nIf you want to install GRPP from [actions](https://github.com/themitosan/grpp/actions) or [releases](https://github.com/themitosan/grpp/releases), follow these steps:\n\n- Download `GRPP.zip` and extract `grpp.tgz`.\n- Open terminal and run the command below:\n\n```shell\nsudo npm i -g grpp.tgz\n```\n\n\u003ca id=\"how-to-build\"\u003e\u003c/a\u003e\n## How to build\nThere are three ways of compiling GRPP: Easy mode, development mode or production mode.\n\n\u003ca id=\"how-to-build-easy\"\u003e\u003c/a\u003e\n### Easy mode\nIf you just want GRPP up and running, just run the following command:\n\n```shell\nnpm i \u0026\u0026 npm run bi\n```\n\nThis will install all required packages, compile the project and install GRPP system-wide.\n\n\u003ca id=\"build-dev-mode\"\u003e\u003c/a\u003e\n### Development mode\nIn order to compile, run the following commands:\n\n```shell\nnpm i \u0026\u0026 npm run webpack\n```\nThe compiled script will be on `Build` dir.\n\n**TIP**: You can also run `npm run dev` - `ts` will watch all changes on your code and will compile script on the go! In this case, the compiled script will be on `App` dir instead.\n\nIn order to run GRPP, you will need to run like this:\n\n```shell\n# webpack\nnode Build/grpp.js\n\n# OR\n\n# Dev mode\nnode App/grpp.js\n```\n\n\u003ca id=\"build-production-mode\"\u003e\u003c/a\u003e\n### Production mode\nFirst, you will need to install all dependencies and compile the project.\n\nTo do this, run the following commands:\n\n```shell\nnpm i \u0026\u0026 npm run build\n```\n\nThis will generate a `.tgz` file inside `Build` dir. In order to install, run the following command:\n\n```shell\nsudo npm i -g grpp.tgz\n```\n\n\u003e [!IMPORTANT]\\\n\u003e You MUST run this command as `sudo`, since it will install grpp as a global package.\n\u003e \n\u003e If you don't have sudo access (like termux without su), you can run without `sudo` (or run `npm run bi-sudoless` to do everything automatically)\n\nIf everything is fine, you will be able to call `grpp` system-wide.\n\n\u003ca id=\"how-to-uninstall\"\u003e\u003c/a\u003e\n## How to uninstall\n\nIt's simple! Just run the following command:\n\n```shell\nsudo npm remove grpp\n```\n\n\u003ca id=\"how-to-use\"\u003e\u003c/a\u003e\n## How to use\n\n\u003e [!IMPORTANT]\\\n\u003e To know everything GRPP can do, we recommend checking out the [command list](cmd_list.md).\n\nThe first thing you need to do is initialize a folder, where it will store it's settings file and all repos.\n\nTo do this, run the following command:\n\n```shell\ngrpp --init\n```\n\nAfter initializing, you will be able to start importing git repos.\n\n\u003ca id=\"how-to-import-git-repos\"\u003e\u003c/a\u003e\n### How to import git repos\n\nThere is some ways you can do this: By importing them one by one, a repo list or even all repos from a specific user.\n\n\u003ca id=\"import-single-repo\"\u003e\u003c/a\u003e\n#### Single repo\n\nTo do that, you can use the `--import=` command with your desired git url:\n\n```shell\ngrpp --import=http://github.com/themitosan/grpp.git\n```\n\nIf everything is fine, you will be able to import this git repo to your current location organized by host/user/repo.\n\n_(On this case, `grpp.git` will be located on `YOUR_CURRENT_PATH/repos/github.com/themitosan/grpp.git`)_\n\n\u003ca id=\"import-multiple-repos\"\u003e\u003c/a\u003e\n#### Multiple repos\n\nYou can import a list of repos from a text file! In order to do this, you can use the following command:\n\n```shell\ngrpp --importList=YOUR_GIT_REPOS_LIST.txt\n```\n\nDoing that, all repos on `YOUR_GIT_REPOS_LIST.txt` will be imported to your current path.\n\n\u003e [!IMPORTANT]\\\n\u003e Make sure there is only one `git` url per line!\n\n\u003ca id=\"get-user-repos\"\u003e\u003c/a\u003e\n### Getting all repos from a specifc user\n\nSince common git hosting websites _(like GitHub or GitLab)_ API's allows fetching user data, GRPP is capable to get all repos from a selected list of users and importing them!\n\nIn order to do that, you can use the following command:\n\n```shell\ngrpp --getReposFrom=USERNAME\n```\n\nYou will be prompted asking where GRPP should seek `USERNAME` repos.\n\nAfter selecting one of selected options, it will display all repos from the provided user and asking if you want to import. \n\n\u003e [!IMPORTANT]\\\n\u003e Since some git hosting websites limits each ip that fetches data very often, GRPP is configured to fetch only 500 repos per user (100 repos per fetch).\n\nIf you want to start fetching data from a specific page or fetch a specific number of pages, you can use these commands below:\n\n```shell\n# Fetch 10 repo pages (Default: 5)\ngrpp --setMaxFetchPages=10 --getReposFrom=themitosan\n\n# Set start fetch page to 4 (Default: 1)\ngrpp --setStartPage=4 --getReposFrom=themitosan\n```\n\n\u003ca id=\"how-to-update\"\u003e\u003c/a\u003e\n### How to update repos\n\nThere is two ways of doing this: by updating a specifc repo or by updating all at same time.\n\n\u003ca id=\"update-single-repo\"\u003e\u003c/a\u003e\n#### Update a single repo\n\nTo update a single repo, just run the following command:\n\n```shell\ngrpp --update=[PATH_TO_GRPP_REPO]\n```\n\n\u003ca id=\"update-all-repos\"\u003e\u003c/a\u003e\n#### Update all repos\n\n**This is where GRPP shines!** To update all repos, run the following command:\n\n```shell\ngrpp --batch\n```\n\nThis will create a determinated number of processes, updating all repos that can be updated on GRPP.\n\nTo set the number of processes running, you will need to divide the number of repos that will be updated per process.\n\nExample: Let's just say that you have `100` repos on your database. If you want 4 processes, you can run the following command:\n\n```shell\ngrpp --maxReposPerList=25\n```\n\nThis will create four processes, each updating 25 repos.\n\nAfter processing all repos, GRPP will show the update results and save a copy on `Logs` dir.\n\n\u003ca id=\"external-tools\"\u003e\u003c/a\u003e\n## External tools used on this project\n- [Webpack](https://webpack.js.org)\n- [Photopea](https://www.photopea.com)\n\n\u003ca id=\"external-code-snippets\"\u003e\u003c/a\u003e\n## External code snippets\n\nSome code snippets from internet were used on this project. You can see all of them listed below:\n\n- [Console text color sheet](https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color)\n- [Original snippet that changes terminal window title](https://github.com/daguej/node-console-title/blob/master/rename.js)\n- [Original INI Parser](https://gist.github.com/anonymous/dad852cde5df545ed81f1bc334ea6f72)\n- [Original DNS internet check](https://stackoverflow.com/questions/54887025/get-ip-address-by-domain-with-dns-lookup-node-js)\n- [Original snippet to format time in hhmmss](https://stackoverflow.com/questions/6312993/javascript-seconds-to-time-string-with-format-hhmmss)\n- [Original snippet to convert array in smaller chunks](https://stackabuse.com/how-to-split-an-array-into-even-chunks-in-javascript)\n- [Original snippet that clears console + history](https://github.com/lukeed/console-clear/blob/master/index.js)\n\n\n\u003csup\u003e_Some parts of this software derivates from TMS Engine source code._\u003c/sup\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemitosan%2Fgrpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthemitosan%2Fgrpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemitosan%2Fgrpp/lists"}