{"id":36446764,"url":"https://github.com/jtagcat/git-id","last_synced_at":"2026-01-11T22:47:00.394Z","repository":{"id":40311108,"uuid":"429010878","full_name":"jtagcat/git-id","owner":"jtagcat","description":"[WIP:PoC] Dumb git identity management, just works.","archived":false,"fork":false,"pushed_at":"2022-11-12T23:05:19.000Z","size":289,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-06-20T05:13:07.453Z","etag":null,"topics":["authentication","git","identity-management","multi-identity","ssh"],"latest_commit_sha":null,"homepage":"","language":"Go","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/jtagcat.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}},"created_at":"2021-11-17T11:01:41.000Z","updated_at":"2024-05-01T22:20:32.000Z","dependencies_parsed_at":"2023-01-22T11:45:57.084Z","dependency_job_id":null,"html_url":"https://github.com/jtagcat/git-id","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jtagcat/git-id","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtagcat%2Fgit-id","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtagcat%2Fgit-id/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtagcat%2Fgit-id/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtagcat%2Fgit-id/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jtagcat","download_url":"https://codeload.github.com/jtagcat/git-id/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtagcat%2Fgit-id/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28326144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T22:11:01.104Z","status":"ssl_error","status_checked_at":"2026-01-11T22:10:58.990Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["authentication","git","identity-management","multi-identity","ssh"],"created_at":"2026-01-11T22:46:59.721Z","updated_at":"2026-01-11T22:47:00.379Z","avatar_url":"https://github.com/jtagcat.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [`git-id`](https://github.com/jtagcat/git-id)\nPortable dumb identity management for Git, the [stupid content tracker](https://git-scm.com/docs/git#_name).\n\n\n## Project status\nTotally non-functional. I went on a tangent on implementing a library to interact with ssh_config, wanting to make it beautiful. ssh_config is really, quite ugly. \n\n***\n\n\n```sh\n$ git id init # Include git-id.conf in ~/.ssh/config\n$ git id remote add gh github.com\n$ git id add gh default ~/.ssh/id_rsa --username jtagcat --email 'user@domain.tld'\n$ git id add gh work ~/.ssh/work_sk --username irlname --email 'irl@work.biz' --description 'Evilcorp'\n\n$ git id clone work git@github.com:evilcorp/private_repo.git # clone using id:work\n$ cd private_repo\n$ git id default # switch from id:work to id:default\n$ git push\nERROR: Permission to evilcorp/private_repo.git denied to jtagcat.\n```\n\nTODO: instructions for zsh/othershell automatic `alias \"git clone\"=\"git id clone \u003cid\u003e\"` (can be done with func: case: \"$@\")\n\n## How it works\n```ascii\n     PUSH github.com\nGit ─────────────────► SSH             ~/.ssh/id_rsa SSH github.com\n jtagcat                │                ▲\n user@domain.tld        │                │\n                        ▼                │\n                ~/.ssh/git-id.conf       │\n                  MATCH originalhost github.com\n```\n```ascii\n    PUSH work.gh.git-id\nGit ───────────────────► SSH  ┌──────► ~/.ssh/work_sk SSH github.com\n irlname                  │   │\n irl@work.biz             │   │\n                          ▼\n                  ~/.ssh/git-id.conf\n                    HOST work.gh.git-id ─► work_sk                                    Created with\n                    HOST    *.gh.git-id ─► github.com          https://github.com/lewish/asciiflow\n```\n\nSo, `git-id` is here to implement basic git identity management without dependencies: something simple to use, something that just works when you need to push a commit from your work, other work, or h4ck3r account, to the same remote host.\n\nThe reliable™ hijack depends on `ssh_config`, and 2 git configurations:\n - The domain/host inside the git remote url is changed to a pseudohost (later picked up by `ssh_config`). This is essentially a coded message to SSH for 'please use this identity'\n - `core.sshCommand` - this is used to force git (repo) to use a specific `ssh_config` file(s) (removing the possibility that the default gets picked up)\n - `ssh_config` matches the pseudohost to a (requested) ssh key, and changes back to the real host.\n\nBesides organizing the hijcak, `git-id` sets Git user.name and user.email, and keeps a list of identities, their purpose and their usage (for later mass-changes).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtagcat%2Fgit-id","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjtagcat%2Fgit-id","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtagcat%2Fgit-id/lists"}