5 stable releases
2.0.2 | Sep 12, 2024 |
---|---|
2.0.1 | Aug 30, 2024 |
1.1.0 | Jul 27, 2024 |
1.0.0 | Jul 23, 2024 |
#1115 in Command line utilities
50KB
1K
SLoC
Don't you hate it when you're interacting with multiple git accounts, forget about it and end up making commits with
wrong name?
g is here to solve that issue, without cumbersome management of custom hosts in your ~/.ssh/config
and switching your
credentials manually each time.
Prerequisites
- git 2.10+
- openssl 3+
- cargo 1.79+
Installation
cargo install g-rs
Warning: Windows is currently not supported.
Usage
Creating a profile
To get started, you'll need to create your first profile.
g profile add johnsmith "John Smith" john.smith@example.com
By default, g looks if the profile file exists - skipping this stage if it does.
Duplicating profile name is not allowed, using the same username + email combination for 2 different profiles is also not allowed.
Then g generates ssh keys - if none exist, they're both generated; if private exists, public is re-generated from it.
You can also run this command with --force
flag to overwrite profile if it exists and re-generate ssh keys.
Inspecting your profiles
You can list all existing g profiles with g profile list
.
To see properties of a specific profile, use g profile show <PROFILE_NAME>
.
Switching profiles
The core feature of g is quickly jumping between your profiles. You can do it with the su
command: g su johnsmith
.
This configures your credentials for current git repository if you run g from inside a repo, or globally otherwise.
You can still set profile globally from inside a repo by using the --global
flag.
Even though su
is also related to profile management, I've decided to put it as a separate command rather than
subcommand of profile
, because of how often it is used.
You can see currently active profile with g whoami
, it also supports --global
flag to check the globally configured
profile.
This is just basic overview of commands, for more info run the built-in g help
, or help for a specific
command/subcommand.
How does it work?
Switching profiles doesn't do anything fancy - it just finds the correct git config and sets user.name
, user.email
and core.sshCommand
there.
Your profiles are serialized to bytes and saved under ~/.config/g-profiles/
.
Ssh keys are stored in the standard location - ~/.ssh
. \
When using whoami
command, g infers your identity from user.name
and user.email
set in detected git config.
In order to avoid scanning all profiles for that, g caches a small key-value store in ~/.config/g-profiles/.cache
.
When you remove a profile, it's also wiped from this cache.
Dependencies
~19MB
~400K SLoC