You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This major release of StGit brings improved performance, several new features, and many refinements compared to StGit 1.x. It is recommended that all StGit users upgrade to 2.0.0.
Many thanks to all the StGit users who took the time and effort to try out the many alpha, beta, and release candidate releases leading up to this final 2.0.0 release. Lots of issues, big and small, were worked out from this effort to make this a high-confidence release.
Removed
stg clone is removed. Use git clone and stg init instead.
stg mail is replaced with stg email format and stg email send.
stg refresh --spill is replaced with dedicated stg spill command.
stg edit no longer accepts -O/--diff-opts. Custom diff options is in conflict with editable diffs since many (most?) diff options cause the diff to no long be applicable.
stg files no longer accepts -O/--diff-opts. This option was of marginal value since it only had a possible side effect when --stat was being used.
Added
stg id now accepts the -b/--branch option.
stg completion command provides runtime support for shell completions.
stg completion list shows StGit commands and aliases and is used at completion-time by shell completion scripts.
stg completion man generates man pages in asciidoc format.
stg email format wraps git format-patch and provides a mechanism to generate patch emails and optional cover letter in mbox format.
stg email send wraps git send-email and allows sending patch emails, either from files generated by stg email format or by specifying patches directly.
stg new --refresh allows a new patch to be refreshed with changes in one step. The -i/--index, -F/--force, -s/--submodules, and --no-submodules options from stg refresh are also available to stg new when using -r/--refresh.
stg series gains the -i/--commit-id option to display patches' commit ids.
stg show diff output can now be limited to certain paths by specifying path limits on the command line.
stg spill replaces stg refresh --spill.
stg version gains -s/--short flag to show shortened version info.
Added documentation for patch range syntax to stg(1) man page.
Added install-all target to top-level Makefile that installs the executable, man pages, html pages, and shell completions.
Changed
StGit is now implemented entirely in Rust instead of Python.
StGit is generally much faster; many commands are up to 4x faster. There was an emphasis on making informational commands such as stg id, stg series, and stg top as fast as possible to make their use in interactive contexts (shell prompts, IDE extensions) more comfortable.
StGit error messages have been updated; many have different, and hopefully better, wording. Error messages are also use color (when color is enabled). Scripts relying on exact error messages from StGit will need to be updated.
StGit output to stdout is generally more terse. Commands that change the stack such as push, pop, and commit, use sigils to denote the changes made to the stack. E.g. stg commit p0..p3 will output $ p0..p3 where the "$" sigil means that a patch, or patch range, has been committed. These are all the currently used stack change sigils:
+ patch was pushed
- patch was popped
> patch became the current topmost patch
& patch was updated
$ patch was committed
# patch was deleted
@ patch was rolled-back
! patch was hidden
StGit aliases are now more like Git aliases. Normal aliases refer to StGit subcommands, but aliases prefixed with '!' are shell aliases that may run arbitrary commands. An example normal alias would be git config stgit.alias.list 'series --description --empty'. An example shell alias would be git config stgit.alias.st '!git status --short'.
Commands such as stg goto, stg push, and stg pop now require full/correct patch names on the command line and no longer accept unambiguous patch name prefixes. When an inexact patch name is provided on the command line, the error message will now suggest similar valid patch names.
Additional template search paths were added. In addition to looking for template files in .git/, also look in $XDG_CONFIG_HOME/stgit/templates/ and $HOME/.stgit/templates. This search strategy is consistent with how git looks for the global config file.
The new --signoff patch edit option supercedes the deprecated --sign and --sign-by options. --signoff without its optional value does the same thing as --sign, while --signoff=<value> does the same thing as --sign-by=<value>.
The --ack and --review patch edit options now optionally take a value. The --ack-by and --review-by options are deprecated.
stg branch output is now generally less verbose.
stg branch --describe replaces stg branch --description. The --description subcommand remains supported as a hidden alias to --describe, but the description string must now be provided as its own argument; i.e. --description="description string" is no longer supported.
stg branch --list now produces colorized output. The --color option or NO_COLOR environment variable may be used to affect this behavior.
stg branch --rename now supports renaming regular git branches in addition to StGit-enabled branches.
stg clean now uses -A and -U short options for --applied and --unapplied instead of -a and -u. This is done for consistency with stg series and stg show.
stg import now only recognizes compressed patches by their file extension (.bz2 or .gz) and no longer proactively attempts to decompress using all known decompressors.
stg import support for compressed input files is selectable at compile time using the import-compressed feature.
stg import support for importing from a URL is selectable at compile time using the import-url feature. N.B. there is a measurable runtime performance impact of building with import-url due to the unconditional, pre-main initialization of curl which affects allstg commands.
stg log now colorizes output by default. The --color option or NO_COLOR environment variable may be used to affect this behavior.
stgit.new.verbose changed to stgit.edit.verbose and now also affects edit behavior for edit, refresh, and squash along with new.
stg new now accepts -e/--edit and -d/--diff instead of -v/--verbose
stg pick now allows a mix of commits and patches to be picked whereas previously only a single commit xor multiple patches could be picked.
stg pick now performs a single stack transaction for all the picked patches/commits instead of one transaction per pick.
stg push now attempts to perform three-way merges, which may improve conflict resolution in some cases. This feature is enabled by default when git >= 2.32.0 is detected.
stg rebase --interactive the "squash" and "fixup" instructions may no longer be applied to the first patch in the instruction list. The stated semantics of both "squash" and "fixup" is that they squash the labeled patch with the preceding patch, which is not possible/valid when there is no preceding patch.
stg refresh no longer has a --spill flag. Use stg spill instead.
stg series has updated colorized output.
stg series now requires patch range arguments to be both in-order and contiguous. Constraining patch ranges in this manner ensures that the output from stg series is always a valid/correct view of a subset of the series.
stg show diff output respects the --color option.
stg squash now allows the full suite of patch edit options, including -d/--diff. Previously only a few message-related options were available.
stg version now displays copyright and license statements.
Fixed
stg branch --create inherits the current branch's remote branch configuration, if available. The Python implementation had an apparent bug that prevented inheriting the remote branch configuration when creating from the current branch.
Avoid case insensitive patch name collisions. On operating systems with case-insensitive paths, patch names that only differ by case lead to patch reference collisions. StGit now ensures that patch names are distinct under case insensitive comparisions.
stg pull and stg rebase record updated stack state instead of deferring until the next stack-modifying command to do so.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
This major release of StGit brings improved performance, several new features, and many refinements compared to StGit 1.x. It is recommended that all StGit users upgrade to 2.0.0.
Many thanks to all the StGit users who took the time and effort to try out the many alpha, beta, and release candidate releases leading up to this final 2.0.0 release. Lots of issues, big and small, were worked out from this effort to make this a high-confidence release.
Removed
stg cloneis removed. Usegit cloneandstg initinstead.stg mailis replaced withstg email formatandstg email send.stg refresh --spillis replaced with dedicatedstg spillcommand.stg editno longer accepts-O/--diff-opts. Custom diff options is in conflict with editable diffs since many (most?) diff options cause the diff to no long be applicable.stg filesno longer accepts-O/--diff-opts. This option was of marginal value since it only had a possible side effect when--statwas being used.Added
stg idnow accepts the-b/--branchoption.stg completioncommand provides runtime support for shell completions.stg completion bashgenerates bash shell completion script.stg completion fishgenerates fish shell completion script.stg completion zshoutputs zsh shell completion script.stg completion listshows StGit commands and aliases and is used at completion-time by shell completion scripts.stg completion mangenerates man pages in asciidoc format.stg email formatwrapsgit format-patchand provides a mechanism to generate patch emails and optional cover letter in mbox format.stg email sendwrapsgit send-emailand allows sending patch emails, either from files generated bystg email formator by specifying patches directly.stg new --refreshallows a new patch to be refreshed with changes in one step. The-i/--index,-F/--force,-s/--submodules, and--no-submodulesoptions fromstg refreshare also available tostg newwhen using-r/--refresh.stg seriesgains the-i/--commit-idoption to display patches' commit ids.stg showdiff output can now be limited to certain paths by specifying path limits on the command line.stg spillreplacesstg refresh --spill.stg versiongains-s/--shortflag to show shortened version info.install-alltarget to top-level Makefile that installs the executable, man pages, html pages, and shell completions.Changed
stg id,stg series, andstg topas fast as possible to make their use in interactive contexts (shell prompts, IDE extensions) more comfortable.push,pop, andcommit, use sigils to denote the changes made to the stack. E.g.stg commit p0..p3will output$ p0..p3where the "$" sigil means that a patch, or patch range, has been committed. These are all the currently used stack change sigils:+patch was pushed-patch was popped>patch became the current topmost patch&patch was updated$patch was committed#patch was deleted@patch was rolled-back!patch was hiddengit config stgit.alias.list 'series --description --empty'. An example shell alias would begit config stgit.alias.st '!git status --short'.stg goto,stg push, andstg popnow require full/correct patch names on the command line and no longer accept unambiguous patch name prefixes. When an inexact patch name is provided on the command line, the error message will now suggest similar valid patch names.$XDG_CONFIG_HOME/stgit/templates/and$HOME/.stgit/templates. This search strategy is consistent with how git looks for the global config file.--signoffpatch edit option supercedes the deprecated--signand--sign-byoptions.--signoffwithout its optional value does the same thing as--sign, while--signoff=<value>does the same thing as--sign-by=<value>.--ackand--reviewpatch edit options now optionally take a value. The--ack-byand--review-byoptions are deprecated.stg branchoutput is now generally less verbose.stg branch --describereplacesstg branch --description. The--descriptionsubcommand remains supported as a hidden alias to--describe, but the description string must now be provided as its own argument; i.e.--description="description string"is no longer supported.stg branch --listnow produces colorized output. The--coloroption orNO_COLORenvironment variable may be used to affect this behavior.stg branch --renamenow supports renaming regular git branches in addition to StGit-enabled branches.stg cleannow uses-Aand-Ushort options for--appliedand--unappliedinstead of-aand-u. This is done for consistency withstg seriesandstg show.stg importnow only recognizes compressed patches by their file extension (.bz2or.gz) and no longer proactively attempts to decompress using all known decompressors.stg importsupport for compressed input files is selectable at compile time using theimport-compressedfeature.stg importsupport for importing from a URL is selectable at compile time using theimport-urlfeature. N.B. there is a measurable runtime performance impact of building withimport-urldue to the unconditional, pre-main initialization ofcurlwhich affects allstgcommands.stg lognow colorizes output by default. The--coloroption orNO_COLORenvironment variable may be used to affect this behavior.stgit.new.verbosechanged tostgit.edit.verboseand now also affects edit behavior foredit,refresh, andsquashalong withnew.stg newnow accepts-e/--editand-d/--diffinstead of-v/--verbosestg picknow allows a mix of commits and patches to be picked whereas previously only a single commit xor multiple patches could be picked.stg picknow performs a single stack transaction for all the picked patches/commits instead of one transaction per pick.stg pushnow attempts to perform three-way merges, which may improve conflict resolution in some cases. This feature is enabled by default when git >= 2.32.0 is detected.stg rebase --interactivethe "squash" and "fixup" instructions may no longer be applied to the first patch in the instruction list. The stated semantics of both "squash" and "fixup" is that they squash the labeled patch with the preceding patch, which is not possible/valid when there is no preceding patch.stg refreshno longer has a--spillflag. Usestg spillinstead.stg serieshas updated colorized output.stg seriesnow requires patch range arguments to be both in-order and contiguous. Constraining patch ranges in this manner ensures that the output fromstg seriesis always a valid/correct view of a subset of the series.stg showdiff output respects the--coloroption.stg squashnow allows the full suite of patch edit options, including-d/--diff. Previously only a few message-related options were available.stg versionnow displays copyright and license statements.Fixed
stg branch --createinherits the current branch's remote branch configuration, if available. The Python implementation had an apparent bug that prevented inheriting the remote branch configuration when creating from the current branch.stg pullandstg rebaserecord updated stack state instead of deferring until the next stack-modifying command to do so.Changed since 2.0.0-rc.2
Changed
Fixed
stg email send --branchThis discussion was created from the release Stacked Git 2.0.0.
Beta Was this translation helpful? Give feedback.
All reactions