git identity manager
zit chooses a git identity based on:
- git remote host
- repository owner
- repository name
… as defined in the configuration file:
# Example config
---
users:
work: &work_user
name: "John Doe"
email: "john.doe@corp.com"
personal:
github_user: &personal_github_user
name: "JD42"
email: "JD42@users.noreply.github.com"
sign:
key: "~/.ssh/id_ed25519_github.pub"
format: "ssh"
gitlab_user: &personal_gitlab_user
name: "JD42"
email: "786972-JD42@users.noreply.gitlab.com"
hosts:
github.com:
default: *personal_github_user
overrides:
- owner: "corp"
user: *work_user
gitlab.com:
default: *personal_gitlab_user
There are 2 ways to set up a configuration file:
- Place it in
XDG_CONFIG_HOME
location:
$XDG_CONFIG_HOME/zit/config.yaml
- Place it in
.config
location:$HOME/.config/zit/config.yaml
Alternatively, run:
zit config init
vim $(zit config path)
To set up an identity, run zit set
inside a repo directory:
$ zit set # personal repo
set user: jdoe <jdoe@users.noreply.github.com>
set signing key: ssh key at ~/.ssh/id_ed25519_github.pub
$ git remote get-url origin
https://github.com/jdoe/repo.git
$ zit set # work repo
set user: John Doe <john.doe@corp.com>
$ git remote get-url origin
git@github.corp.com:team/repo.git
Note: Use --dry-run
flag to test which identity will be used without
applying it.
On Mac/Linux with Homebrew
brew tap ayakovlenko/tools
brew install ayakovlenko/tools/zit
From sources
git clone https://github.com/ayakovlenko/zit.git
cd zit
go install
From binaries
Download binaries from the releases page.
Remove any existing global identity
git config --unset-all --global user.name
git config --unset-all --global user.email
git config --unset-all --system user.name
git config --unset-all --system user.email
Require config to exist in order to make commits
git config --global user.useConfigOnly true
Without the global user name and user email, git would use the system's hostname and username to make commits. Tell git to throw an error instead, requiring you to specify an identity for every new project.
Run zit doctor
to make sure the system is configured correctly:
$ zit doctor
- [x] git config --global user.useConfigOnly true
- [x] git config --unset-all --global user.name
- [x] git config --unset-all --global user.email
- [x] git config --unset-all --system user.name
- [x] git config --unset-all --system user.email
If you feel you can contribute to this project, or you've found a bug, create an issue or pull request.
This project is soley mantained, so it is prone to bugs and anti-patterns, please call them out.
All contributions are highly appreciated!