+
Skip to content
/ git-mob Public

Co-author commits tool. A cross-platform command-line tool for social coding. Includes co-authors in commits when pair/mob programming.

License

Notifications You must be signed in to change notification settings

rkotze/git-mob

Repository files navigation

Git Mob npm downloads npm version

A command-line tool for social coding

Includes co-authors in commits when you collaborate on code. Use when pairing with a buddy or mobbing with your team.

📣 Findmypast engineering team have handed me ownership of Git-Mob. Shout out to them because they have a great engineering culture who enabled me to build Git Mob.

Read our blog post to find out why git-mob exists: Co-author commits with Git Mob

✨ Git Mob VS Code extension

gif showing example usage of git-mob

Install

git-mob is a CLI tool, so you'll need to install the package globally.

npm i -g git-mob

By default git-mob will use the global config .gitmessage template to append co-authors.

Using git commit -m setup

How to append co-authors to the message when using message flag - git commit -m "commit message"?

  1. Add prepare-commit-msg hook file in .git/hooks dir. See hook-examples
  2. The hook will need to be executable chmod +x prepare-commit-msg

prepare-commit-msg will need a script to read the co-authors, which can be done via git mob-print. See hook-examples folder for working scripts.

The command git mob-print will output to stdout the formatted co-authors.

Note: > v1.1.0 git mob --installTemplate and git mob --uninstallTemplate has been removed.

Revert back to default setup

  1. Remove relevant scripts prepare-commit-msg file

Workflow / Usage

With git-mob, the primary author will always be the primary user of the computer. Set your author info in git if you haven't done so before.

$ git config --global user.name "Jane Doe"
$ git config --global user.email "jane@example.com"

To keep track of potential co-authors, git-mob uses a JSON file called ~/.git-coauthors. Here's a template of its structure.

{
  "coauthors": {
    "<initials>": {
      "name": "<name>",
      "email": "<email>"
    }
  }
}

Start by adding a few co-authors that you work with.

$ cat <<-EOF > ~/.git-coauthors
{
  "coauthors": {
    "ad": {
      "name": "Amy Doe",
      "email": "amy@findmypast.com"
    },
    "bd": {
      "name": "Bob Doe",
      "email": "bob@findmypast.com"
    }
  }
}
EOF

You're ready to create your mob. Tell git-mob you're pairing with Amy by using her initials. git mob ad

Selected co-authors are stored globally meaning when switching between projects your co-authors stay the same*.

*Note: If you've set a local commit template in your config then that template will be updated. However, not when you switch projects and you will see a warning. You can run git mob to update the commit template. Read more here

$ git mob ad
Jane Doe <jane@example.com>
Amy Doe <amy@example.com>

Commit like you normally would. You should see Co-authored-by: Amy Doe <amy@example.com> appear at the end of the commit message.

Let's add Bob to the group to create a three-person mob.

$ git mob ad bd
Jane Doe <jane@example.com>
Amy Doe <amy@example.com>
Bob Doe <bob@example.com>

Once you're done mobbing, switch back to developing solo.*

$ git solo
Jane Doe <jane@example.com>

Add co-author from GitHub

Provide the GitHub username to generate their co-author details. The anonymous GitHub email is used.

$ git mob rkotze
Jane Doe <jane@example.com>
Richard Kotze <10422117+rkotze@users.noreply.github.com>

Git Mob config

Git Mob config is a section in the Git config.

Use local commit template

If you are using a local commit template and want to remove the warning message then set this option to true. Only reads from the local git config.

type: Boolean, scope: local, version: 2.2.0

git config --local git-mob-config.use-local-template true

More commands

List all co-authors

Check which co-authors you have available in your .git-coauthors file.

$ git mob --list
jd Jane Doe jane@example.com
ad Amy Doe amy@example.com
bd Bob Doe bob@example.com

Overwrite the main author

Overwrite the current author which could be useful for pairing on different machines

If the current author is: Bob Doe

$ git mob -o jd ad
jd Jane Doe jane@example.com
ad Amy Doe amy@example.com

Now the author has changed to Jane Doe.

Add co-author

Add a new co-author to your .git-coauthors file.

$ git add-coauthor bb "Barry Butterworth" barry@butterworth.org

Delete co-author

Delete a co-author from your .git-coauthors file.

$ git delete-coauthor bb

Edit co-author

Edit a co-author's details in your .git-coauthors file.

$ git edit-coauthor bb --name="Barry Butterworth" --email="barry@butterworth.org"
$ git edit-coauthor bb --name="Barry Butterworth"
$ git edit-coauthor bb --email="barry@butterworth.org"

Suggest co-authors base on current repo

Suggest some co-authors to add based on existing committers to your current repo

$ git suggest-coauthors

Add initials of current mob to your prompt

Bash

Add the initials to PS1, in ~/.bashrc

function git_initials {
  local initials=$(git mob-print --initials)
  if [[ -n "${initials}" ]]; then
    echo " [${initials}]"
  fi
}

export PS1="\$(pwd)\$(git_initials) -> "

Fish

Add the following functions to .config/fish/config.fish

function git_initials --description 'Print the initials for who I am currently pairing with'
  set -lx initials (git mob-print --initials)
  if test -n "$initials"
    printf ' [%s]' $initials
  end
end

function fish_prompt
  printf "%s%s ->" (pwd) (git_initials)
end

* If you have git-duet installed, you'll need to uninstall it since it conflicts with the git-solo command.

Find out more with git mob -h

About

Co-author commits tool. A cross-platform command-line tool for social coding. Includes co-authors in commits when pair/mob programming.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Sponsor this project

Contributors 18

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载