GIT-PILE(1)

NAME
git-pile - git pile

DESCRIPTION
usage: git-pile [-h] [-v]

    {init,setup,genpatches,genbranch,format-patch,am,genlinear-branch,baseline,destroy,reset} ...

Manage a pile of patches on top of a git branch

git-pile helps to manage a long running and always changing list of patches on top of git branch. It is similar to quilt, but aims to retain the git work flow exporting the final result as a branch. The end result is a configuration setup that can still be used with it.

There are 2 branches and one commit head that are important to understand how git-pile works:

    PILE_BRANCH: where to keep the patches and track their history RESULT_BRANCH: the result of applying the patches on top of (changing) base

The changing base is a commit that continues to be updated (either as a fast-forward or as non-ff) onto where we want to be based off. This changing head is here called BASELINE.

    BASELINE: where patches will be applied on top of.

This is a typical scenario git-pile is used in which BASELINE currently points to a "master" branch and RESULT_BRANCH is "internal" (commit hashes here onwards are fictitious).

A---B---C 3df0f8e (master)

    \

    X---Y---Z internal

PILE_BRANCH is a branch containing this file hierarchy based on the above example:

series config X.patch Y.patch Z.patch

The "series" and "config" files are there to allow git-pile to do its job and are retained for compatibility with quilt and qf. For that reason the latter is also where BASELINE is stored/read when it's needed. git-pile exposes commands to convert back and forth between RESULT_BRANCH and the files on PILE_BRANCH. Those commands allows to save the history of the patches when the BASELINE changes or patches are added, modified or removed in RESULT_BRANCH. Below is a example in which BASELINE may evolve to add more commit from upstream:

    D---E master

    /

A---B---C 3df0f8e

    \

    X---Y---Z internal

After a rebase of the RESULT_BRANCH we will have the following state, in which X', Y' and Z' denote the rebased patches. They may have possibly changed to solve conflicts or to apply cleanly:

A---B---C---D---E 76bc046 (master)

    \

    X'---Y'---Z' internal

In turn, PILE_BRANCH will store the saved result:

series config X'.patch Y'.patch Z'.patch

  optional arguments:

-h, --help
    show this help message and exit

-v, --version
    show program's version number and exit

  Commands:

    {init,setup,genpatches,genbranch,format-patch,am,genlinear-branch,baseline,destroy,reset}

init
    Initialize configuration of an empty pile in this repository

setup
    Setup/copy configuration from a remote or already created branches

genpatches
    Generate patches from BASELINE..RESULT_BRANCH and save to output directory

genbranch
    Generate RESULT_BRANCH by applying patches from PILE_BRANCH on top of BASELINE

format-patch
    Generate patches from BASELINE..HEAD and save patch series to output directory to be shared on a mailing list

am  Apply patch, generated by git-pile format-patch, to the series and recreate RESULT_BRANCH

genlinear-branch
    Generate linear branch from genbranch on each pile revision

baseline
    Return the baseline commit hash

destroy
    Destroy all git-pile on this repo

reset
    Reset RESULT_BRANCH and PILE_BRANCH to match remote