4.0 KiB
git-me
git me
is a very simple identity management script for the popular distributed version control system git
.
It is written in Python (3.6+) which is easy to install on Linux distributions, and often already installed.
Motivations
When you have multiple online identities, it can get a bit confusing with git
as you either have to remember to
specify your identity for every repo or use a global configuration and end up leaking the wrong identity
to the wrong repository.
With git-me
fully installed, you will not be able to use identity-leaking commands such as git commit
unless you have an identity specified in that repository's local .git/config
file.
Of course, git-me
provides a quick way to configure that identity from a list of presets that you provide,
either in a TSV file or by using git me add
.
Side-note: git and SSH for multiple accounts
(Side-note:) In order to use multiple GitLab/GitHub accounts with different SSH keys, you can use a ssh-config
like the
following:
Host acc1.gitlab
HostName gitlab.com
RSAAuthentication Yes
IdentityFile ~/.ssh/acc1_rsa
Host o42.gitlab
HostName gitlab.com
RSAAuthentication Yes
IdentityFile ~/.ssh/oliichi42_rsa
Host gitlab.com
HostName specify.a.gitlab.account
Usage
git me
is designed to be simple and intuitive. See some of the commands here:
Managing identities
Identities will be stored in ~/.config/git-me
by default, but the GIT_ME_STORE
environment variable can
be used to change that. The identity store file is a TSV (tab-seperated value) file.
To add an identity:
git me add <slug> "<name>" <e-mail address>
Note: a slug
is an easy-to-type specifier that you choose; it must be unique.
Example:
git me add personal "Joseph Watson" j.watson@example.com
To list your identities:
git me ls
will list your identities in a (currently skewed) table.
Example:
joe@jwpc:~$ git me ls
git-me identity store: /home/joe/.config/git-me
# Slug Name E-mail Address
personal Joseph Watson j.watson@example.com
To remove an identity:
git me rm <slug>
will delete the identity with that slug.
Example:
git me rm personal
Using an identity
git me use <slug>
will configure the current git repo to use the identity with that slug.
Example:
joe@jwpc:~/gitrepo$ git config --list --local
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
joe@jwpc:~/gitrepo$ git me use personal
git-me identity store: /home/joe/.config/git-me
joe@jwpc:~/gitrepo$ git config --list --local
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=Joseph Watson
user.email=j.watson@example.com
Checking that your identity is being used
You can use the command git me assert
to assert that you have an identity set for the local repository.
It will warn you and fail if you do not.
The real power of this command comes from using the included git-checked.py
wrapper as it will
automatically assert that you have a set identity BEFORE you commit.
You can use it by adding e.g. a bash alias.
alias git='python3.6 /path/to/git-checked.py'
Installation
To install git me
as a true and proper git
subcommand, I would recommend saving the contents of this repository
somewhere and making git-me.py
and git-checked.py
executable.
Note: you may have to change the hashbang lines if your Python interpreter is not known as python3.6
.
Then, you can create a symlink to make git-me.py
usable as git me
:
ln -s /path/to/git-me.py ~/.local/bin/git-me
Note: this assumes ~/.local/bin
is in your PATH. Adjust if necessary.
and add an alias to your .bashrc
or other shell profile:
alias git='python3.6 /path/to/git-checked.py'
Thanks
I wrote this tool for personal use but you are certainly free to use, modify or extend it.
Feel free to submit merge requests or issues.
Licence: MIT (as included).