Tips & Tricks

Grouping by project directories

To make the most out of mu-repo, it's recommended that the projects you work with specify their own dependencies by committing the .mu_repo file with relative paths so that it's possible to go inside any of those repository dirs and issue commands not only to the repository, but all the dependent repositories at once (and this will also enable you to clone the all the needed repositories at once).


Say you have projectA, projectB and projectC and have a dependency so that:

projectC -> projectB, projectA
projectB -> projectA

It's recommended that you go into projectC and do:

mu register ../projectA
mu register ../projectB

and in projectB:

mu register ../projectA

By doing so, when going into projectC and doing a command using mu, the command will also be issued to projectB and projectA and by going into projectB it'll also execute commands in projectA.

Also, this will enable the command mu clone projectC to clone projectB and projectC all at once (See the Cloning for further details).

Tip: If you have several projects and need even finer grained control over where to execute a command, it's possible to create a group to identify a subset of the repositories (See the Grouping Repositories for further details).


The .mu_repo file has a simple format (each line must be something as name=var or name=var1, var2), so, it's straightforward to edit it with your favorite editor.

mu acp

mu provides some shortcuts which extend a bit on git and the mu acp <commit message> (which stands for add -A, commit -m <commit message>, push) is a really handy one, so, if you just checked your structure (with mu dd and want to add all the changes, commit them and push in a single command, use mu acp (also, just mu a or mu ac <commit message> or mu c <commit message> can be used just for one of those parts).

Calling a different executable

The whole concept of mu-repo is calling git on multiple repositories, but it's actually possible to specify any executable for it to work on (by assiging it to the git variable):

mu set-var git=c:\bin\myexecutable.exe

Previewing incoming changes

It's usually nice to know what you'll get when you update your repository. For that mu-repo includes a nice command: mu upd. It fetches changes for the current branch and compares the current branch with the fetched changes (using WinMerge or meld).

If changes are Ok, you can then use mu rb to update your current version (it stashes your current changes, performs a rebase so that your current committed changes are put on top of incoming changes and then unstashes what has been stashed). Note: be careful as it'll do rebase, so, if your changes are already pushed in another branch don't use this command and do a manual merge instead.

Previewing and editing changes in the working directory

For comparing what would be committed in mu ac, it's possible to use mu dd. It'll create a directory structure with working dir vs head (for the multiple repositores) and opens WinMerge on Windows or Meld on Linux with it (doing mu ac will commit exactly what's compared in this situation), allowing those changes to be edited.

See: mu dd on Commands for more details.