Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
M

mob

> 开发工具
Open source

Tool for smooth git handover.

1.8K stars0 likes0 views
WebsiteGitHub

About

Tool for smooth git handover.

# Fast git handover with mob

**#StandWithUkraine [donate here](https://www.savethechildren.org.uk/where-we-work/europe/ukraine) #StandWithUkraine** Fast [git handover](https://www.remotemobprogramming.org/#git-handover) for remote pair/mob programming. - **mob** is [an open source command line tool written in go](https://github.com/remotemobprogramming/mob) - **mob** is the fastest way to [hand over code via git](https://www.remotemobprogramming.org/#git-handover) - **mob** keeps your branches clean and only creates WIP commits on temporary branches - **mob** has a shared team timer [timer.mob.sh](https://timer.mob.sh) - **mob** is on 'assess' in the [Thoughtworks Technology Radar](https://twitter.com/simonharrer/status/1453372354097205253?s=20) - **mob** has [VSCode integration](https://marketplace.visualstudio.com/items?itemName=alessandrosangalli.mob-vscode-gui) ## What people say about mob > Sometimes you come across a tool that you didn't realize you needed until you do; mob is just such a tool. Living as we do in a world where remote pair programming has become the norm for many teams, having a tool that allows for seamless handover either between pairs or a wider group as part of a mob programming session is super useful. mob hides all the version control paraphernalia behind a command-line interface that makes participating in mob programming sessions simpler. It also provides specific advice around how to participate remotely, for example, to "steal the screenshare" in Zoom rather than ending a screenshare, ensuring the video layout doesn't change for participants. A useful tool and thoughtful advice, what's not to like? — [Technology Radar Volume 25, thoughtworks](https://www.thoughtworks.com/radar/tools/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](https://twitter.com/jlangr) > "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](https://twitter.com/missjennbo) > "I was recently introduced to [mob.sh](https://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](https://twitter.com/fabienillert) ## How to install The recommended way to install mob is as a binary via the provided install script: ```bash # Works for macOS, Linux, and even on Windows in Git Bash curl -sL install.mob.sh | sh ``` On macOS via Homebrew: ```bash brew install mob ``` On Windows via [Scoop](https://scoop.sh/): ```bash scoop install mob ``` or via [Chocolatey](https://chocolatey.org/): ```bash choco install mob ``` On Arch Linux via yay: ```bash yay -S mobsh-bin ``` On [Nix](http://nixos.org) through declarative installation: ```nix { pkgs, ... }: { # Either for all users environment.systemPackages = with pkgs; [ mob ]; # Or for an explicit user users.users."youruser".packages = with pkgs; [ mob ]; } ``` On NetBSD, macOS, SmartOS, Linux, FreeBSD, OpenBSD, and more, via [pkgsrc](https://pkgsrc.org): ```bash # If there's a binary package for your platform pkgin install mob # Otherwise, for any platform cd pkgsrc/devel/mob && bmake install clean ``` On Ubuntu there's an EXPERIMENTAL [snap](https://snapcraft.io/mob-sh) package with a known limitation (ssh-agent not working): ```bash sudo snap install mob-sh sudo snap connect mob-sh:ssh-keys ``` ### Using go tools If you have go 1.20+ you can install and build directly from source: ```bash go install github.com/remotemobprogramming/mob/v4@latest ``` or pick a specific version: ```bash go install github.com/remotemobprogramming/mob/[email protected] ``` or to install latest unreleased changes: ```bash go install github.com/remotemobprogramming/mob/v4@main ``` ## 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 `main` branch with `mob done` and commit them. Here's a short example on how the two developers Carola and Maria code a feature together and push it in the end. ```bash # Carola main $ mob start mob/main $ echo "hello" > work.txt mob/main $ mob next # Maria main $ mob start mob/main $ cat work.txt # shows "hello" mob/main $ echo " world" >> work.txt mob/main $ mob next # Carola mob/main $ mob start mob/main $ cat work.txt # shows "hello world" mob/main $ echo "!" >> work.txt mob/main $ mob done main $ git commit -m "create greeting file" main $ git push ``` And here's the man page of the tool: ``` … ``` If you need some assistance when typing the subcommands and options, you might want to have a look at [fig](https://fig.io/) which gives you autocompletion in your shell. ## 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 whose turn is ending and whose turn has started. But even more important, the person whose 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** - Set up a global keyboard shortcut to start sharing your screen. In Zoom, you can do this via Zoom > Preferences > Keyboard Shortcuts. [More tips on setting up Zoom for effective screen sharing.](https://effectivehomeoffice.github.io/setup-zoom-for-effective-screen-sharing/) - *Why?* This is just much faster than using the mouse. - **Set your editor to autosave** - Have your editor save your files on every keystroke automatically. IntelliJ products do this automatically. VS Code, however, needs to be configured via "File > Auto Save toggle". - *Why?* Sometimes people forget to save their files. With autosave, any change will be handed over via `mob next`. ### The Perfect Git Handover The perfect git handover is quick, requires no talking, and allows the rest of the team to continue discussing how to best solve the current problem undisturbed by the handover. Here's how to achieve that. - **Situation** Maria is typist sharing the screen, Mona is next - **Maria** runs `mob next` - keeps sharing the screen with the terminal showing the successful run of `mob next` - does nothing (i.e., no typing, no mouse cursor movement, no window switching) - **Mona** steals screenshare using keyboard shortcut, and, afterwards, runs `mob start` - **Maria** checks her twitter ### Complementary Scripts `mob-start feature1` creates a new base branch `feature1` to immediately start a wip branch `mob/feature1` from there. ```bash mob-start() { git checkout -b "$@" && git push origin "$@" --set-upstream && mob start --include-uncommitted-changes; } ``` ### Useful Aliases ```bash alias ms='mob start' alias mn='mob next' alias md='mob done' alias moo='mob moo' ``` ### Use the name you like ```bash mob version #v1.11.0 alias ensemble='mob' # introduce alias export MOB_CLI_NAME='ensemble' # makes it aware of the alias ensemble next # to start working together, use # # ensemble start # ``` And starting with v1.12.0, `mob` is symlink aware as well: ```bash mob version #v1.12.0 ln -s /usr/local/bin/mob /usr/local/bin/ensemble ensemble next # to start working together, use # # ensemble start # ``` ### Automatically set the timer room when using ticket numbers as branch modifiers Say you're a larger team and work on the same git repository using ticket numbers as branch modifiers. It's easy to forget exporting the room that enables the integration with timer.mob.sh. Just set the configuration option `MOB_TIMER_ROOM_USE_WIP_BRANCH_QUALIFIER=true` in `~/.mob` for that. ### Automatically open the last modified file of the previous typist When you are rotating the typist, you often need to open the file, which the previous typist has modified last. Mob supports you and can automate this step. You just need the configuration option `MOB_OPEN_COMMAND` with the command to open a file in your preferred IDE. For example if you want use IntelliJ the configuration option would look like this: `MOB_OPEN_COMMAND="idea %s"` ## More on Installation ### Known Issues - When you have an ssh key with a password and you running mob on windows in powershell, you will not be able to enter a password for your ssh key. You can circumvent this problem by using the git bash instead of powershell. ### Linux Timer (This is not needed when installing via snap.) 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: ```bash sudo apt-get install espeak-ng-espeak mbrola-us1 ``` or on Arch Linux as follows: ```bash sudo pacman -S espeak-ng-espeak yay -S mbrola-voices-us1 ``` Create a little script in your `$PATH` called `say` with the following content: ```bash #!/bin/sh espeak -v us-mbrola-1 "$@" ``` If you use WSL2 on windows, install eSpeak as windows tool and Create a little script in your `$PATH` called `say` with the following content: ```bash #!/bin/sh /mnt/c/Program\ Files\ \(x86\)/eSpeak/command_line/espeak.exe "$@" ``` make sure that the path to the windows `espeak.exe`fits your installation. You can avoid the long path by adding it to your windows path variable. ## How to configure Show your current configuration with `mob config`: ``` … ``` Override default value permanently via a `.mob` file in your user home or in your git project repository root. (recommended) Override default value permanently via environment variables: ```bash export MOB_NEXT_STAY=true ``` Override default value just for a single call: ```bash MOB_NEXT_STAY=true mob next ``` ### Integration with timer.mob.sh For your name to show up in the room at timer.mob.sh you must set a timer value either via the `MOB_TIMER` variable, a config file, or an argument to `start`. ## How to uninstall Mob can simply be uninstalled by removing the installed binary (at least if it was installed via the http://install.mob.sh script). ### Linux ```bash rm /usr/local/bin/mob ``` ### Window

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Goclicli-toolensembleensemble-programming

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category开发工具
PricingOpen source

> Related tools

V
VS Code
流行的开源代码编辑器
G
Git
分布式版本控制系统
V
Vite
下一代前端构建工具