Stacked Git
Project page
News
Download
Tutorial
Man page
Acknowledgements
StGit is a Python application providing similar functionality to Quilt (i.e. pushing/popping patches
to/from a stack) on top of Git. These operations are performed using Git commands and the
patches are stored as Git commit objects, allowing easy merging of the StGit patches into other
repositories using standard Git functionality. StGit is licensed under the
GNU General Public License.
Note that StGit is not an SCM interface on top of Git and it expects a previously initialised Git
repository. For standard SCM operations, either use plain Git commands or the Cogito tool.
For more information, see the README file in the archive.
Please report bugs via the project page
or the StGit users mailing list.
2013-09-30: StGit-0.17.1 released
2013-06-27: StGit-0.17 released
2012-01-09: StGit-0.16 released
- Several improvements to the Emacs mode (stgit.el).
- UI adjustments to better match the Git commands.
- "stg status" is an alias for "git status".
- "stg reset --hard" behaves similarly to the corresponding git command
and option.
- "stg branch --cleanup" option to remove the StGit metadata for a given
branch.
- "stg mail" can use "git send-email" directly.
- Vim syntax highlighting for StGit commit messages.
- Many bug-fixes.
2009-10-24: StGit-0.15 released
- New core infrastructure for repository operations,
including infinite undo/redo operations and automatic rollback
of changes following a failed operation (using transactions)
- Some commands were added, including "stg squash" (for
combining two or more patches into one), "stg publish" (for
maintaining merge-friendly branches which are never rebased)
and "stg prev/next" (for printing the name of the previous or
next patch in the series)
- The commands "stg add", "stg rm", "stg cp", and "stg
resolved" were removed, since there are corresponding Git
equivalents
- The "stg import" and "stg fold" commands support the "-p N"
option for stripping leading slashes from diff paths
- The "stg import" and "stg fold" commands support the
"--reject" option for leaving rejected hunks in corresponding
*.rej files
- New patch identification syntax:
<branch>:<patch> (see documentation for the "stg
id" command)
- Autosigning of imported patches when "sign.autosign"
configuration option is set
- A powerful Emacs mode for StGit was added to the "contrib"
directory. It displays the patch stack in an Emacs buffer, and
can handle all common StGit tasks
- Improved bash tab-completion, automatically generated from
the stg command definitions
- Man pages and an improved tutorial
2009-04-10: StGit repository moved to repo.or.cz
- The StGit repository was moved to git://repo.or.cz/stgit.git. The previous HTTP-based Git repository
is no longer updated and it will be removed in the future. To update the cloned trees, run "git remote rm origin; git remote add origin
git://repo.or.cz/stgit.git"
2008-06-08: StGit-0.14.3 released
- This is a maintenance release including bug-fixes for the "refresh"
command, handling of file names with non-ASCII characters and user
interface enhancements for "export" and "sync"
2008-03-24: StGit-0.14.2 released
- This is a maintenance release including bug-fixes and a few user
interface enhancements
2007-12-12: StGit-0.14.1 released
- Fixed typo in the required version of Python
2007-12-10: StGit-0.14 released
- Support for correctly running StGit in subdirectories
- 'repair' command for fixing an StGit repository modified by
Git commands such as 'commit', 'pull', 'merge' or 'rebase'
- 'edit' command for editing both the patch description and diff
- Support for SMTP over TLS
- Support for MIME multipart e-mail templates
- '--attach' option to the 'mail' command to send a patch attached
rather than inline
- Diff statistics and shortlog added to the cover e-mail template
- '--sign/ack' options to the 'import' and 'new' commands
- '--number' to the 'log' command for limiting the output
- Support for binary files in patches
- Support for detached HEAD
- Refactoring of some modules with better support for debugging
- Many bug-fixes
2007-07-26: StGit-0.13 released
- Documentation directory with man pages
- Safety checks for the 'rebase' command
- Various contrib scripts
- 'cp' command to copy files
- 'sink' command to complement 'float'
- '--diff-opts' option to some commands for passing additional arguments
to 'git-diff-*'
- 'stgit.mail.prefix' configuration option for the default 'mail --prefix' value
- Interractive 2-way merging via xxdiff or emacs (previously, only 3-way
merging had this feature)
- Slightly changed behaviour to the 'patches' command when no argument
is given to show the patches touching the locally modified files
- Correct importing of multipart e-mails
- '--unrelated' option to 'mail' to send patches unthreaded and without sequence
numbering
- '--update' option to 'refresh' to only check in the files already modified by the
current patch (similar to 'pick --update')
- '--keep' option to 'goto' (though it only works for patch popping)
- '--expose' option to 'pick' to append the picked commit id to the log (similar
to the 'git cherry-pick -x' command)
- The 'new' command can automatically generate the patch name from the
given log
- 'uncommit' can generate patches up to a given commit id
- Bug fixes
2007-02-23: StGit-0.12.1 released
- Allow StGit to run when there is no user information configured
- Use 'git-pull' rather than 'git-fetch' by default
- Fix the 'mail' command to parse multiple-lines address headers
- Fix the alias check in the 'stg mail --bcc' command
- Add '--merged' option to rebase
- Add '--url' option to 'import' to import a file directly from the network
- Add '--author' option to 'series'
2007-02-06: StGit-0.12 released
- New 'rebase' command to change the base of an StGit stack
- New 'hide' and 'unhide' commands to act on the patches in a series. Additional
options were added to 'series' for displaying the hidden patches
- New 'sync' command to synchronise same patches in different branches
- New 'assimilate' command to transform Git (accidental) commits at the top of the
stack in StGit patches
- Re-worked pulling logic to use the branch information stored in the .git/config file
- Abbreviation for StGit commands
- Correct encoding of the e-mail headers and body
- Support for importing multipart e-mails and mbox files
- Configuration read from the Git config files rather than stgitrc
- Patch ranges can be specified for 'export'
- '--missing' option for 'series' to list the patches on a branch which are missing in current
- StGit bash completion script
- Bug fixes
2006-10-21: StGit-0.11 released
- New 'float' command to bring a range patches to the top of the stack. This command
can also take a series file as a parameter, allowing easy reordering of the patches
- Patch history support, accessible through the 'log [--graphical]' command
- Use the '..' syntax for patch ranges instead of ':'
- '--keep' option for 'pop' to preserve the local changes (useful to add the modifications
to a different patch)
- '--graphical' option for 'series' to invoke gitk instead of listing the patches
- Automatically generate patch names for the 'import', 'pick' and 'uncommit' commands
- '--noreply' option for 'mail' to not send messages as replies to the first one. This is
useful for mailing lists filtering replies with a different subject
- '--interactive' option for 'resolved' to invoke a graphical 3-way merge tool (xxdiff or emacs)
- '--sign' and '--ack' options for 'refresh' to sign off or acknowledge a patch
- Diff colouring pager script added to the contrib directory
- Configurable low-level pull command (i.e. git-pull)
- '--auto' option for 'mail' to automatically cc the patch signers
- Debian package support files
- Bug fixes
2006-06-11:StGit-0.10 released
- Handle branch names with slashes
- Testsuite framework
- Configurable file extensions for merge conflicts
- 'goto' command, equivalent to 'pop --to' or 'push --to'
- '--update' option for 'pick' to only fold the changes to files already in the current patch
- '--replace' option for 'import' to replace existing patches in the series
- Look for templates in ~/.stgit/templates as well
- Allow multiple patch names on the 'push' command line
- Classify commands in 'stg --help' output
- Bug fixes
2006-04-07: StGit-0.9 released
- Faster three-way merge by using 'git-read-tree --aggressive' and dealing with conflicts internally
(gitmergeonefile.py removed)
- StGit repositories are now 'git prune'-safe
- 'show' command for displaying a given patch
- 'uncommit' command for reversing the effects of 'commit'
- '--series' option added to the 'import' command
- '--merged' option added to the 'push' and 'pull' commands to check for patches merged upstream
- '--undo' option added to 'refresh'
- Patch refreshing can be done for individual files only
- '--stdout' option added to 'export'
- '--mbox' option added to 'mail'
- 'smtpdelay' configuration option for delays between messages sending
- $PAGER or the 'pager' configuration option used for the 'show' and 'diff' commands
- '--force' option removed from the 'new' command
- Bug fixes
2006-01-22: StGit-0.8.1 released
- Fix the removal vs. change merging conflict
- 'clone' command fixed
- 'status --reset <file>' command fixed
- typos corrected
2005-12-23: StGit-0.8 released
- 'branch' command for the Git branches manipulation: creation, deletion, switching, renaming,
cloning (including the StGit patches)
- 'patches' command to show the StGit patches modifying a file
- Better visualisation of the StGit patches and branches (a short description can be displayed)
- '--fold' option for the 'pick' command to allow folding a given commit onto an existing patch
- Automatic invocation of the editor for the cover message when sending a series by e-mail
- StGit informs when a patch was modified during a push or pick operation (i.e. a three-way merge
was needed)
- StGit now complies with the recommended format for the author information in the patch
description (both for sending and receiving)
- Further optimisations
- Bug fixes
2005-10-15: StGit-0.7.1 released
- 'push' command optimisation - git-apply will be tried first, falling back to a three-way merge
if it does not succeed
- escape punctuation in the parsed e-mail addresses to avoid problems when passing the
environment to the Git commands
2005-10-02: StGit-0.7 released
- Uses the renamed Git commands (requires Git ≥ 0.99.7)
- 'pick' command to cherry-pick a commit object as an StGit patch using a three-way merge.
It also allows reverse-applying
- 'commit' command to permanently store the applied patches into the repository
- 'push' can now fast-forward the patches if the base tree object has not changed
- The configuration file supports the 'editor' field
- '--version' option for the 'mail' command to generate the e-mail subject in the form
'[PATCH version nr/total]'
- '--showpatch' option for 'refresh' to show the patch content when editing the patch description
- '--branch' option for several commands to work on a given branch instead of the current one
without switching
- the 'pull' command was updated to follow the 'git pull' API
- '--base' option for 'import' to import a diff file on a different base and perform a three-way merge
with the HEAD afterwards
- Support for the '.gitignore' file
- Several other optimisations
- Bug fixes
2005-08-21: StGit-0.6 released
- StGit can now be installed in other directory than /usr (the default prefix is now $HOME).
The '/etc/stgitrc' file is no longer installed since the defaults are hard-coded in StGit
- 'clone' command implemented
- 'fold' command implemented. This command integrates a GNU diff patch into the current
patch. It can also do a three-way merge
- '--edit' option for 'import'. This option allows one to modify the patch description during
the import operation
- The '%(number)s' variable added to the e-mail templates which expands to
' number/total' if total > 1 or empty if total is 1
- The README file is almost empty since the documentation moved to the web
- Bug fixes
2005-07-30: StGit-0.5 released
- Improved help for commands
- 'mail' command to automatically e-mail a range of patches. The e-mail format is
fully configurable via templates
- 'import' command to import a GNU diff patch. The patch file can be a standard e-mail message
or a normal file with the patch description at the top
- 'pull' command to automatically advance the base of the stack and merge the changes
into the applied patches
- 'clean' command to delete the empty patches in a series
- 'rename' command to change the name of a patch
- '--range' option for the 'export' command
- '--force' option for the 'new' command to create a patch even if there are local changes
in the tree
- Default templates for the 'export' and 'mail' commands (installed in /usr/share/stgit/templates/)
- Bug fixes
2005-07-10: StGit repository available (see the Download
section below)
2005-07-09: StGit-0.4 released
- Support for configuration files (/etc/stgitrc, ~/.stgitrc, .git/stgitrc)
- Configurable merge tool ('diff3' by default)
- Empty patches are marked with a '0' when listed with 'series' (useful for tracking upstream merges)
- Support for patch description templates (with variables like author details and diffstats)
- 'files' command to show the files modified by a patch (either a simple list or with diffstats)
- 'push --undo' option to cancel a push operation
- 'push/pop --to' option to perform the operation on a range of patches between the given names
- 'push --reverse' option to push patches in reverse order
- 'diff --stat' option to show the diffstats instead of the diff
- Faster 'pop' - it now switches directly to the bottom of the last patch to be popped
- The three files involved in a three-way merge are left in the working tree in case of a conflict
for further analysis (can be overwritten with the 'keeporig' option)
- Many bug fixes
2005-06-28: StGit-0.3 released
- closer to the Quilt functionality
- there is only one commit object per patch which can be indefinitely modified using the
'refresh' command. The commit objects are stacked on top of the base and can also be accessed
via standard Git commands
- no 'commit' command. Use 'refresh' instead
2005-06-22: StGit daily snapshots are available (see the Download
section below)
2005-06-20: StGit-0.2 released
- Multiple heads are supported. Each head has its own series (needs
separate 'stg init' commands for each head). To change between series,
simply change the .git/HEAD link
- top/bottom files for each patch are backed up as a safety measure
- 'stg push' warns when the patch is empty (i.e. it was already
merged upstream)
- Many bug fixes. The tool is now usable
2005-06-16: StGit-0.1 released
stgit-0.17.1.tar.gz
StGit repository (Git): git://repo.or.cz/stgit.git
Many thanks to Karl Wiberg, Yann Dirson, Chuck Lever and Paolo
'Blaisorblade' Giarrusso for their great contribution to the
development of StGit. Many thanks to all the people who contributed
patches, ideas or reported bugs.