treebundel

Homepage: https://github.com/purplg/treebundel

Author: Ben Whitley

Updated:

Summary

Bundle related git-worktrees together

Commentary

This package is used for bundling related git-worktrees from multiple
repositories together.  This helps switch quickly between repositories and
ensure you're on the correct branch.  When you're done with your changes, you
can use the repositories in the workspace and know which ones were modified
to simplify the process of getting the changes merged in together.

Additionally, git metadata (the =.git= directory) is shared between all
projects.  You can stash, pop, and pull changes in from the same repository in
other workspaces thanks to the power of git-worktrees.


Terminology:

Bare
  A bare repository used as a source to create a 'PROJECT's git-worktree.

Project
  A git-worktree checked out from a 'BARE' stored in a 'WORKSPACE'.

Workspace
  A collection of 'PROJECT's created from 'BARE's.


Structure:

The workspaces directory is structured as such:

`treebundel-workspace-root' (default: "~/workspaces/")
   |
   L workspace1
   |    L project-one   (branch: "feature/workspace1")
   |    L project-two   (branch: "feature/workspace1")
   |    L project-three (branch: "feature/workspace1")
   |
   L workspace2
        L project-one   (branch: "feature/workspace2")
        L project-two   (branch: "feature/workspace2")
        L project-three (branch: "feature/workspace2")


Quick start:

Assuming default configuration, the following will create a bare clone of the
provided repo URL to '~/workspaces/.bare/.git', then create and
open a worktree for a new branch called 'feature/'.

1. Interactively call `treebundel-add-project'.
2. Enter name for the new (or existing) workspace.
3. Select '[ clone ]'.
4. Enter the URL to clone for the repository to be added to the workspace.


Configuration:

`treebundel-branch-prefix'
 Default: 'feature/'

This is probably the most subjective variable you'd want to customize.  With
its default value, when you add a project to a workspace named, for example,
'new-protocol', the new project will be checked out to a new branch called
'feature/new-protocol'.

`treebundel-workspace-root'
 Default: '~/workspaces/'

This one is also very subjective.  It's where all of your workspaces will
exist on your file-system.

`treebundel-project-open-function'
 Default: `project-switch-project'

This is the function called when a project is opened.  You could also just
make this `find-file' to just open the file instantly or any other function
that takes a file path.

`treebundel-before-workspace-open-functions'
`treebundel-before-project-open-functions'
`treebundel-after-project-open-hook'
`treebundel-after-workspace-open-hook'

These hooks are called before or after a project or workspace is
opened.  `treebundel-before-workspace-open-functions' receives the
name of the workspace to be opened as a single argument and
`treebundel-before-project-open-functions' receives the workspace
and project name opened.

Usage:

The following functions are the commands you should use (and
probably bind) to make use of this package.

`treebundel-open'
  Open a project in a workspace.

`treebundel-open-project'
  Open other project within current workspace.

`treebundel-add-project'
  Add a project to a workspace.

`treebundel-remove-project'
  Remove a project from a workspace.  This will check if the project
  has any changes before removing it.

`treebundel-delete-workspace'
  Delete a workspace.  This will also remove all projects in a
  workspace if they don't have any changes.

Dependencies