Skip to content

ayakovlenko/zit

Repository files navigation

zit

git identity manager

How it works

zit chooses a git identity based on:

  1. git remote host
  2. repository owner
  3. repository name

… as defined in the configuration file.

2 types of configuration files are supported:

Jsonnet

local User(name, email) = { name: name, email: email };

local user = {
  "personal": User("jdoe", "jdoe@users.noreply.github.com"),
  "work": User("John Doe", "john.doe@corp.com")
};

{
  "github.com": { // Public GitHub
    "default": user.personal,
    "overrides": [
      { // Your employer's organization at github.com
        "owner": "corp",
        "user": user.work
      }
    ]
  },
  "github.corp.com": { // Your employer's GitHub Enterprise
    "default": user.work
  }
}

YAML

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
    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

Setup

There are 2 ways to set up a configuration file:

  1. Place it at the default location: $HOME/.zit/config.jsonnet
  2. Specify an environment variable that points to the config file:
export ZIT_CONFIG=~/.zit-config.jsonnet
# or
export ZIT_CONFIG=~/.zit-config.yaml

If the environment variable is set up, it will be chosen over the config at the default location.

Usage

To set up an identity, run zit set inside a repo directory:

$ zit set  # personal repo
set user: jdoe <jdoe@users.noreply.github.com>

$ 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.

Installation

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.

Setup

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

Development

Run all tests:

./scripts/test.sh

Release:

  • Bump version
  • Commit changes
./scripts/release.sh