Skip to main content
Version: 0.8.0

Workspace

A workspace tracks git repositories without relying on git submodules.

Inside a workspace you can use the usual every day git-operations. The sole purpose of bob git is to enhance git for the multi-repo case.

info

In case of a monorepo you can just ignore workspaces.

The cmds bob clone and bob git are intended to operate on a workspace.

  • bob workspace - track repositories and remotes.
  • bob clone - clone entire workspaces and single repositories.
  • bob git - like git, but for multi-repos.

Commands

bob workspace init

Initializes a new workspace by creating a .bob.workspace file in the current directory. This file should be under version control.

bob workspace add

Add repositories to a workspace.

bob workspace add git@github.com:Benchkram/bob.git

Creates a entry in .bob.workspace and adds the checkout directory to the .gitignore file of your workspace. The repository is not yet cloned to your workspace. A repository added to a workspace is called tracked.

Tracked repositories can be cloned using

bob clone

Already cloned repositories are ignored.

bob clone

Clone can be used like plain git clone.

bob clone git@github.com:Benchkram/bob.git

If the repository contains a .bob.workspace file, it clones them recursively.

If you run bob clone directly in a repository containing a .bob.workspace file, it will clone all tracked repositories from that .bob.workspace file.

bob git

Behaves closely to plain git but it's optimised to operate on multiple repositories.

bob git will execute the operation in relation to the top most .bob.workspace file it can find.

bob git status

An example of bob git status in a workspace:

bob git status

Highlighted directories indicate child git repositories. Therefore bob git add and bob git commit will only operate on the repository a file belongs to allowing you to create repository overlapping commits all together.

bob git add

Adds each file to the respective repository it belongs to as shown by bob git status. This means you can copy+paste lines from bob git status directly into bob git add.

bob git add .         # add CWD (for all repos below CWD)
bob git add * # match all (below CWD)
bob git add a/ # add everything in directory a/
bob git add a/*.yaml; # add yaml file in directory a/
bob git add ../b; # if ../ results in another git repo ../b is added there.
bob git add one two # multiple path specs

bob git commit

Runs git commit on each repository in a workspace. First git commit --dry is executed on all repositories. Execution is stopped in case of an error. The output of the underlying git command is piped to the terminal. Similar to this:

/               success
[master 7ad56ed] "commit msgs"
1 file changed, 3 insertions(+), 1 deletion(-)

second-level/ success
[master d2c5a7b] "commit msgs"
1 file changed, 4 insertions(+), 1 deletion(-)

bob git push

Coming soon!

bob git stash

Coming soon!