git-subtree-sync icon indicating copy to clipboard operation
git-subtree-sync copied to clipboard

A small tool for managing read-only subtrees split from a monolithic development repository.

git subtree sync

A small tool for managing read-only subtrees split from a monolithic development repository.

Use case

This tool is very limited and if you don't know what git subtrees are, and what they're useful for then this is not the tool for you. :koala:

If you wish to do development of a large project in a single monolithic git repository, and distribute the components via separate repositories, then this tool might be useful to you.

This tool just:

  • Create/updates subtree branches
  • Copies tags from the primary repository to the subtree repositories

Requirements

  • git 1.8.0+
  • bash 4.0 or greater
  • GNU grep
  • GNU awk

Installation

git clone https://github.com/GawainLynch/git-subtree-sync.git
sudo ln -s /path/to/git-subtree-sync/git-subtree-sync.sh /usr/local/bin/git-subtree-sync

Configuration

You will need to create a file called .gitsubtree in your monolithic repository, and populate it with the following parameters:

# Base URL of the upstream subtree repositoies 
[email protected]:your-org-name

# Full path to the local primary monolithic repo
MONOLITH_REPO_ROOT=/path/to/monolithic/repo

# Full *base* path that will contain the subtree repositories
SUBTREE_REPO_ROOT=/path/to/subtrees

# Bash 4+ associative array of:
#
# Key: Subtree's project name. Will be used for the name of the subtree's 
#      directory under SUBTREE_REPO_ROOT and appended to REMOTE_BASE_URL
#
# Value: The relative path of the subtree in the monolithic repository
#
PREFIX_DIRS=(
    ["project-a"]="src/ProjectA/"
    ["project-b"]="src/ProjectB/"
    ["project-c"]="src/ProjectC/"
)

A .gitsubtree.dist file is in the root of this repo that can be copies and adapted as needed.