All Projects â†’ remotemobprogramming â†’ Mob

remotemobprogramming / Mob

Licence: mit
Tool for swift git handover.

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Mob

Peaclock
A responsive and customizable clock, timer, and stopwatch for the terminal.
Stars: ✭ 314 (-24.88%)
Mutual labels:  cli, timer
Pomd
🍅 A good old cli based Pomodoro timer with native notifications
Stars: ✭ 151 (-63.88%)
Mutual labels:  cli, timer
Cocona
Micro-framework for .NET Core console application. Cocona makes it easy and fast to build console applications on .NET Core.
Stars: ✭ 398 (-4.78%)
Mutual labels:  cli
Telegram backup
Java app to download all your telegram data.
Stars: ✭ 409 (-2.15%)
Mutual labels:  cli
Natal
📲 Bootstrap ClojureScript React Native apps
Stars: ✭ 404 (-3.35%)
Mutual labels:  cli
Libcopp
cross-platform coroutine library in c++
Stars: ✭ 398 (-4.78%)
Mutual labels:  timer
Eva
a calculator REPL, similar to bc(1)
Stars: ✭ 405 (-3.11%)
Mutual labels:  cli
Bpfd
Framework for running BPF programs with rules on Linux as a daemon. Container aware.
Stars: ✭ 396 (-5.26%)
Mutual labels:  cli
Phpinsights
🔰 Instant PHP quality checks from your console
Stars: ✭ 4,442 (+962.68%)
Mutual labels:  cli
Singel
Single Element Pattern
Stars: ✭ 404 (-3.35%)
Mutual labels:  cli
React Native Version
đŸ”ĸ Version your React Native or Expo app in a `npm version` fashion.
Stars: ✭ 408 (-2.39%)
Mutual labels:  cli
Cli
The Aurelia 1 command line tool. Use the CLI to create projects, scaffold components, and bundle your app for release.
Stars: ✭ 401 (-4.07%)
Mutual labels:  cli
Args
Toolkit for building command line interfaces
Stars: ✭ 399 (-4.55%)
Mutual labels:  cli
Pluradl.py
Automated download of Pluralsight courses
Stars: ✭ 406 (-2.87%)
Mutual labels:  cli
Go Prompt
Building powerful interactive prompts in Go, inspired by python-prompt-toolkit.
Stars: ✭ 4,255 (+917.94%)
Mutual labels:  cli
Globalplatformpro
🌐 🔐 Manage applets and keys on JavaCard-s like a pro (via command line or from your Java project)
Stars: ✭ 409 (-2.15%)
Mutual labels:  cli
Isogram
Generate Google Analytics tracking code with any isogrammic parameters you like
Stars: ✭ 396 (-5.26%)
Mutual labels:  cli
Zlsgo
įŽ€å•æ˜“į”¨ã€čļŗ够čŊģ量、性čƒŊåĨŊįš„ Golang åē“ - Easy to use, light enough, good performance Golang library
Stars: ✭ 398 (-4.78%)
Mutual labels:  cli
Node Minify
Light Node.js module that compress javascript, css and html files
Stars: ✭ 404 (-3.35%)
Mutual labels:  cli
Yaspin
A lightweight terminal spinner for Python with safe pipes and redirects 🎁
Stars: ✭ 413 (-1.2%)
Mutual labels:  cli

Fast git handover with mob

mob Logo

Test Workflow Contributors Downloads Downloads of latest Version Stars

Smooth git handover with 'mob'.

What people say about 'mob'

"Mob has allowed us to run fast-paced, engaging, and effective sessions by enabling sub-10-second handover times and otherwise getting out of the way. A simple but great tool!" — Jeff Langr, developer

"I love it, it is a quantum leap in our collaboration." — Vasiliy Sivovolov, Senior Software Engineer

"What a great tool to organise remote working." — Jennifer Gommans, IT Consultant

"I was recently introduced to mob.sh for remote pairing/mobbing collaboration and I absolutely love it. The timer feature is really a selling point for me. Kudos" — Fabien Illert, IT Consultant

How to install

# works for macOS, linux, and even on windows in git bash
curl -sL install.mob.sh | sh

On macOS via homebrew:

brew install remotemobprogramming/brew/mob

# upgrade to latest version
brew upgrade remotemobprogramming/brew/mob

On windows via Scoop:

scoop install mob

On Nix through the mob.nix expression like this mob = callPackage ./mob.nix {};. To install and configure espeak-ng for text-to-spech support, pass withSpeech = true;.

How to use

You only need three commands: mob start, mob next, and mob done. Switch to a separate branch with mob start and handover to the next person with mob next. Repeat. When you're done, get your changes into the staging area of the master branch with mob done and commit them.

asciicast

mob enables a fast Git handover

Basic Commands:
  start              start mob session from base branch in wip branch
  next               handover changes in wip branch to next person
  done               squashes all changes in wip branch to index in base branch
  reset              removes local and remote wip branch

Basic Commands(Options):
  start [<minutes>]                      Start a <minutes> timer
    [--include-uncommitted-changes|-i]   Move uncommitted changes to wip branch
    [--branch|-b <branch-postfix>]       Set wip branch to 'mob/<base-branch>/<branch-postfix>'
  next
    [--stay|-s]                          Stay on wip branch (default)
    [--return-to-base-branch|-r]         Return to base branch
    [--message|-m <commit-message>]      Override commit message
  done
    [--no-squash]                        Do not squash commits from wip branch
    [--squash]                           Squash commits from wip branch
  reset
    [--branch|-b <branch-postfix>]       Set wip branch to 'mob/<base-branch>/<branch-postfix>'

Timer Commands:
  timer <minutes>    start a <minutes> timer
  start <minutes>    start mob session in wip branch and a timer

Get more information:
  status             show the status of the current mob session
  config             show all configuration options
  version            show the version of mob
  help               show help

Other
  moo                moo!


Add --debug to any option to enable verbose logging


Examples:
  # start 10 min session in wip branch 'mob-session'
  mob start 10

  # start session in wip branch 'mob/<base-branch>/green'
  mob start --branch green

  # handover code and return to base branch
  mob next --return-to-base-branch

  # squashes all commits and puts changes in index of base branch
  mob done

  # make a sound check
  mob moo

Best Practices

  • Say out loud
    • Whenever you key in mob next at the end of your turn or mob start at the beginning of your turn say the command out loud.
    • Why? Everybody sees and also hears who's turn is ending and who's turn has started.But even more important, the person who's turn is about to start needs to know when the previous person entered mob next so they get the latest commit via their mob start.
  • Steal the screenshare
    • After your turn, don't disable the screenshare. Let the next person steal the screenshare. (Requires a setting in Zoom)
    • Why? This provides more calm (and less diversion) for the rest of the mob as the video conference layout doesn't change, allowing the rest of the mob to keep discussing the problem and finding the best solution, even during a Git handover.
  • Share audio
    • Share your audio when you share your screen.
    • Why? Sharing audio means everybody will hear when the timer is up. So everybody will help you to rotate, even if you have missed it coincidentally or deliberately.
  • Use a timer
    • Always specify a timer when using mob start (for a 5 minute timer use mob start 5)
    • Why? Rotation is key to good pair and mob programming. Just build the habit right from the start. Try to set a timer so everybody can have a turn at least once every 30 minutes.
  • Set up a global shortcut for screensharing

More on Installation

Arch Linux

There are two Arch packages in the AUR:

  • mobsh-bin: uses the binary from the upstream release.
  • mobsh: compiles sources from scratch (and runs tests) locally.

Example installation using AUR helper yay:

yay -S mobsh-bin

# OR
yay -S mobsh

Linux Timer

To get the timer to play "mob next" on your speakers when your time is up, you'll need an installed speech engine. Install that on Debian/Ubuntu/Mint as follows:

sudo apt-get install espeak-ng-espeak mbrola-us1

Create a little script in your $PATH called say with the following content:

#!/bin/sh
espeak -v us-mbrola-1 "[email protected]"

How to configure

Show your current configuration with mob config:

MOB_REMOTE_NAME=origin
MOB_WIP_COMMIT_MESSAGE=mob next [ci-skip] [ci skip] [skip ci]
MOB_REQUIRE_COMMIT_MESSAGE=false
MOB_VOICE_COMMAND=say "%s"
MOB_NOTIFY_COMMAND=/usr/bin/osascript -e 'display notification "%s"'
MOB_NEXT_STAY=true
MOB_START_INCLUDE_UNCOMMITTED_CHANGES=false
MOB_WIP_BRANCH_QUALIFIER=
MOB_WIP_BRANCH_QUALIFIER_SEPARATOR=-
MOB_DONE_SQUASH=true
MOB_TIMER=

Override default value permanently via environment variables:

export MOB_NEXT_STAY=true

Override default value just for a single call:

MOB_NEXT_STAY=true mob next

How to contribute

Propose your change in an issue or directly create a pull request with your improvements.

# PROJECT_ROOT is the root of the project/repository

cd $PROJECT_ROOT

git version # >= 2.17
go version # >= 1.16

go build # builds 'mob'

./create-testbed    # creates test assets

go test # runs all tests
go test -run TestDetermineBranches # runs the single test named 'TestDetermineBranches'

# run tests and show test coverage in browser
go test -coverprofile=cover.out && go tool cover -html=cover.out

Run the Tests from your IDE (GoLand or IntelliJ IDEA)

When you try to run mob_test.go in your IDE you may get the following errors:

./mob_test.go:17:2: undefined: configuration
./mob_test.go:17:18: undefined: getDefaultConfiguration
... and so on ...

This is because the Run Configuration uses Test Kind: File as default and therefor does not find the source code within mob.go. Change the Test Kind to Directory, and try again. The tests should work now.

Design Concepts

  • mob is a thin wrapper around git.
  • mob is not interactive.
  • mob owns its wip branches. It will create wip branches, make commits, push them, but also delete them.
  • mob requires the user to do changes in non-wip branches.
  • mob provides a copy'n'paste solution if it encounters an error.
  • mob relies on information accessible via git.
  • mob provides only a few environment variables for configuration.
  • mob only uses the Go standard library and no 3rd party plugins.

Who is using 'mob'?

Credits

Developed and maintained by Dr. Simon Harrer.

Contributions and testing by Jochen Christ, Martin Huber, Franziska Dessart, Nikolas Hermann and Christoph Welcz. Thank you!

Logo designed by Sonja Scheungrab.

<script async defer src="https://cdn.simpleanalytics.io/hello.js"></script>

<style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].