{"id":31920352,"url":"https://github.com/3urobeat/git-anon","last_synced_at":"2025-10-13T21:58:57.750Z","repository":{"id":229316441,"uuid":"776393617","full_name":"3urobeat/git-anon","owner":"3urobeat","description":"📊 Track personal commit statistics at work without sharing any company code!","archived":false,"fork":false,"pushed_at":"2024-10-02T18:57:09.000Z","size":1625,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-24T16:49:40.649Z","etag":null,"topics":["anon","anonymous","git","nuxt","selfhosted","statistics"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/3urobeat/git-anon","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3urobeat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"3urobeat","custom":["paypal.me/3urobeat"]}},"created_at":"2024-03-23T11:39:06.000Z","updated_at":"2024-10-02T18:54:51.000Z","dependencies_parsed_at":"2024-05-31T15:01:31.354Z","dependency_job_id":"5319e1cd-0126-4e3f-bf48-c74d3fd7081a","html_url":"https://github.com/3urobeat/git-anon","commit_stats":null,"previous_names":["3urobeat/git-anon"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/3urobeat/git-anon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3urobeat%2Fgit-anon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3urobeat%2Fgit-anon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3urobeat%2Fgit-anon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3urobeat%2Fgit-anon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3urobeat","download_url":"https://codeload.github.com/3urobeat/git-anon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3urobeat%2Fgit-anon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017012,"owners_count":26085952,"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","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["anon","anonymous","git","nuxt","selfhosted","statistics"],"created_at":"2025-10-13T21:58:41.452Z","updated_at":"2025-10-13T21:58:57.743Z","avatar_url":"https://github.com/3urobeat.png","language":"Vue","funding_links":["https://github.com/sponsors/3urobeat","paypal.me/3urobeat"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cp align=\"center\"\u003e\u003cimg width=75% src=\".github/img/logo.png\"\u003e\u003c/p\u003e\n    \u003ch4\u003e📊 Track personal commit statistics without sharing company code!\u003c/h4\u003e\n    \u003cdiv\u003e\n        \u003ca href=\"#introduction\"\u003eIntroduction\u003c/a\u003e •\n        \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e •\n        \u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e\n    \u003c/div\u003e\n    \u003c!-- \u003cimg src=\"./.github/img/demo.png\"\u003e --\u003e\n\u003c/div\u003e\n\n\u0026nbsp;\n\n\u003ca id=\"introduction\"\u003e\u003c/a\u003e\n\n# 👀 What's this?\nGit Anon is a selfhosted webservice, which allows you to keep track of your personal git commits at work, without ever sharing any code itself.  \n\nGit Anon presents you with a webinterface to input a commit message, modify the commit date and specify a line diff for every file.  \nOnce pressing commit, the service produces your specified line diff by generating random lines, makes the commit and pushes it to your remote repository.  \nGitHub automatically detects the programming languages of your line diffs based on file extension and will show the generated commit as a contribution on your profile, even when the repository is private.\n\n**But why?**  \n1. I like statistics\n2. We use internal git instances and have restricted systems\n3. I want to maintain an accurate contribution graph in order to have a more meaningful profile\n\nAnd you should too!\n\n\u003cp align=\"center\"\u003e\u003cimg src=\".github/img/preview.png\"\u003e\u003c/p\u003e\n\n\u0026nbsp;\n\n\u003ca id=\"installation\"\u003e\u003c/a\u003e\n\n# 🚀 Installation\n### Docker (recommended):\nRun the container using:  \n`docker run -p \u003chost_port\u003e:3000 -v \u003cpath_on_host\u003e:/usr/src/git-anon/data 3urobeat/git-anon:latest`\n\nReplace `\u003chost_port\u003e` with the port you want to access git-anon at.\n\nReplace `\u003cpath_on_host\u003e` with a path to where git-anon should store persistent data at on your system.  \nThis can either be a bind (for example in your home folder `~/git-anon-data`) or a proper volume.\n\n\u003e [!NOTE]\n\u003e If you are using Portainer, make sure to set the working directory at the bottom to `/usr/src/git-anon`\n\n\u0026nbsp;\n\n### Local:\nMake sure you have git, node \u0026 npm installed on your system.\n\nClone the git repository:  \n`git clone https://github.com/3urobeat/git-anon`  \n`cd git-anon`\n\nInstall dependencies:  \n`npm i --omit=dev`\n\nBuild the project:  \n`npm run build`\n\nStart the project:  \n`npm run start`\n\n\u0026nbsp;\n\n\u003e [!IMPORTANT]  \n\u003e No matter which method you chose, make sure to protect the service.  \n\u003e You'll very probably want to expose the service to the outside to be able to access it from your phone when at work.  \n\u003e Git Anon does not provide any authentication itself, so you should either enable a password protection in your reverse proxy - or even better - put it behind a VPN.\n\n\u0026nbsp;\n\n\u003ca id=\"configuration\"\u003e\u003c/a\u003e\n\n# ⚡ Configuration\n### Settings\nPlease open the webpage in your browser and navigate to the `Settings` page.  \n\nSet your `Name` and `Email` to use for every commit.  \nFor GitHub to contribute the commit to your account, the email must be the one connected to your GitHub account (in case of the GitHub provided Email this usually looks like `id+username@users.noreply.github.com`).  \n\nCreate a new private repository on your GitHub profile. This will be used by Git Anon to push your commits to.  \nSet the URL to this repository at `Remote URL` and provide your GitHub username at `Username`.  \n\nYou now have to create an access token to this specific repository, so that Git Anon can authenticate itself and push to it.  \nClick [here](https://github.com/settings/personal-access-tokens/new) and create a new token. Increase the expiration, select the specific repository and grant `Read and Write` access to the `Content` permission.  \nConfirm and copy the new token to the `Password/Access Token` field on the Git Anon settings page.  \n\nPlease make sure to use a fine grained token specifically for this repository, with only the permission explained above. This ensures that should your token get leaked, a potential attacker has no relevant access to your account.\n\n\u003e [!NOTE]  \n\u003e You do not have to use GitHub, it is just used here as it is the most popular option. If you use another service, it must use the same remote URL formatting for the guided settings mode to work. GitHub uses this format:  \n\u003e `https://username:password@domain.tld/path/to/repo.git`\n\nAt last, check the checkbox `Push commits to remote` so that Git Anon pushes your commits to the remote repository.  \nIf you want to keep your repository local (for whatever reason), you can also leave it unchecked and ignore the access token explanation from above.\n\n**Do not forget to click `✅ Save`!**\n\n\u0026nbsp;\n\n### Projects\nClick on `Projects` in the navbar.  \nThis is where you configure your different projects you want to track.\n\nCreate a new Project, give it a fitting name and add however many files you want to track at the right.  \nI recommend creating one file for every programming language used in that project. If JavaScript, HTML and CSS are used, create a file called `Main.js`, one `Main.html` and one `Main.css`.  \nGitHub automatically detects the programming language by looking at the file extension.\n\nClick `✅ Save`.\n\nWhen you now go to the `Home` page, you can select your project and provide a line diff for every file you have just created.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3urobeat%2Fgit-anon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3urobeat%2Fgit-anon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3urobeat%2Fgit-anon/lists"}