guilt - quilt on top of git
Andrew Morton originally developed a set of scripts for maintaining kernel
patches outside of any SCM tool. Others extended these into a suite called
quilt. The basic idea behind quilt is to maintain patches instead of
maintaining source files. Patches can be added, removed or reordered, and they
can be refreshed as you fix bugs or update to a new base revision. quilt is
very powerful, but it is not integrated with the underlying SCM tools. This
makes it difficult to visualize your changes.
Guilt allows one to use quilt functionality on top of a Git repository. Changes
are maintained as patches which are committed into Git. Commits can be removed
or reordered, and the underlying patch can be refreshed based on changes made
in the working directory. The patch directory can also be placed under
revision control, so you can have a separate history of changes made to your
In Guilt, all the patches are stored in .git/patches/$branch/, where $branch is
the name of the branch being worked on. This means that one can have a
independent series of patches for each branch present in the repository. Each
of these per-branch directories contains 3 special files:
guards: This file contains any guards that should be applied to the series when
pushing. It is only present when guards are selected.
series: This file contains a list of all the patch filenames relative to the
per-branch patch directory. Empty and commented out lines are ignored.
status: This file contains the state of the stack. What patches are applied.
Any guilt operation may execute zero or more hook scripts which can be used to
run any housekeeping commands or even abort the execution of the command.
Guilt follows the same basic design of hooks in Git itself. All Guilt hooks are
executable files (generally shell scripts, but they can be anything the
operating system can execute) in .git/hooks/guilt/.
The following hooks are supported:
delete <patch name>
Executed when a patch is deleted from the
patch series via guilt-delete(1).
All commands must be called without a dash. e.g. guilt add
guilt-add - Add a file to git and guilt.
guilt-applied - List applied patches.
guilt-branch - Branch the entire patch
guilt-commit - Commit specified number of
guilt-delete - Delete a patch.
guilt-diff - Outputs various diffs.
guilt-export - Export a patch series (to be
used by quilt).
guilt-files - Print the list of files that the
topmost patch changes.
guilt-fold - Fold a specified patch into the
topmost applied patch.
guilt-fork - Fork the topmost applied
guilt-graph - Create a patch dependency
guilt-guard - Assign guards to patches.
guilt-header - Print a patch header.
guilt-help - open man page of a guilt
guilt-import-commit - Import one or more
commits as patches.
guilt-import - Import specified patch
guilt-init - Initialize guilt for use in a git
guilt-new - Create a new patch.
guilt-next - Output the name of next patch to
guilt-patchbomb - Email a series of commits
guilt-pop - Pop patches from the tree.
guilt-prev - Output name of second topmost
guilt-push - Push patches onto the tree.
guilt-rebase - Rebase pushed patches.
guilt-refresh - Refresh topmost applied
guilt-repair - Repair the repository
guilt-rm - Remove a file from the git tree and
guilt-select - Select guards to apply when
guilt-series - Print the stack of
guilt-status - Print the status of files since
the last refresh.
guilt-top - Output name of topmost applied
guilt-unapplied - List all unapplied
Written by Josef "Jeff" Sipek < firstname.lastname@example.org
Documentation by Brandon Philips < email@example.com
> and Josef
"Jeff" Sipek < firstname.lastname@example.org
Part of the guilt
(7) suite (Generated for Guilt v0.36)