Releases: stacked-git/stgit
Stacked Git 2.2.4
StGit regained the ability to upgrade from stacks created by very old versions of StGit. This includes, for example, stacks created with StGit
v0.19 which is (unfortunately) what is still shipped by Debian/Ubuntu and their derivatives.
Also included are fixes for regressions affecting branch creation and patch import.
Added
- feat: Upgrade from ancient stack state formats (#235)
Fixed
- fix(branch): create based on remote branch (#317)
- fix(import): lost subject lines resembling header (#321)
- fix(import): subject line may be discarded
Changed
- chore: update dependencies
Stacked Git 2.2.3
StGit is repaired to work on Windows once more.
Fixed
- fix: error using on Windows (#273)
- fix: path handling for Windows compatibility
- fix: commit-msg hook run from work root
- fix: avoid "stg.exe" in usage on Windows
- fix: use gitattributes to force LF endings on Windows
- fix: wrap hooks with sh on Windows
Changed
- chore: update to gix 0.44.0
- chore: update other dependencies
Stacked Git 2.2.2
Fixed
- fix: rebase with '@' in ref names (#306)
- fix: improved error messages for unrecognized commands
Stacked Git 2.2.1
This bugfix release addresses regressions with running StGit in linked worktrees and with hooks not working when running from a subdirectory of the work dir. Several other minor issues are also repaired.
Changed
- chore: update to clap 4.2.0
- chore: update to gix 0.43.0
- chore: pin clap minor version
Fixed
Stacked Git 2.2.0
This release contains several quality of life features, including new options for specifying patches and branches on the command line. And improved performance.
Patch Locator Syntax
In addition to being able to specify patches by name, StGit now supports several new alternatives for specifying patches:
- By relative offset from the topmost patch, e.g.
-1
,+3
, or~2
. - By their absolute index in the stack, e.g.
0
or12
. - By offset from another patch, e.g.
some-patch~
orsome-patch+2
. - By relative offset from the last visible patch, e.g.
^
or^2
.
The new patch locator syntax is detailed in the stg
man page.
New Options for stg series
To complement the new patch locator syntax, new -O
/--offsets
and -I/--indices
options display each patch's relative offset from top and absolute index, respectively.
The new -r
/--reverse
option allows the stack to be shown top-side up. This may produce a more intuitive view of the stack for some StGit users. Consider adding a stack
alias using this option, for example with git config --global stgit.alias.stack 'series -rOP'
.
Speaking of aliases, now each of the "Display Options" for stg series
have a --no-xxx
variant. These can be helpful for masking options used in series aliases. For example, the stack
offset suggested above could be run as stg stack --no-offsets
to disable display of offsets.
Finally, the --short
option now takes an optional integer value to specify the number of patches to show.
Branch Locators
StGit now supports specifying a branch using the same @{-<n>}
syntax supported by git
. This enables, for example, switching to the previously checked-out branch with stg branch @{-1}
or just stg branch -
(where -
is synonymous with @{-1}
).
Command Line Options
The --signoff
option now has a short variant -s
. This is a breaking change. The --submodules
no longer has a -s
short option. Similarly, the --series
options for stg import
, stg float
, and stg sync
now use -S
instead of -s
for their short variants.
Gitoxide
StGit now uses Gitoxide (gix crate) instead of libgit2 (git2 crate) as its git access library. In addition to being a pure-Rust dependency, gitoxide has considerably less startup overhead (4x) than git2. This has a big impact on the latency of StGit commands.
Removed
- feat!: remove short -s option for --submodules
- fix!: patch name cannot be {base} or @
Added
- feat: patch locator syntax
- feat: locate branches using @{-N} syntax
- feat(series): Add --reverse option
- feat(series): options for patch offsets and indices
- feat(series): --no-xxx options to override display options
- feat(series): optional value for --short
- feat!: short -s option for --signoff (#245)
- feat(init): add -b/--branch option
Changed
- fix!: use -S as short opt for --series
- feat!: constrain refresh -p to visible patches
- feat(series)!: empty patch prefix changed to *
- feat!: spell errors in lowercase
- refactor: use gitoxide instead of git2
- refactor: use time crate instead of chrono
- feat!: update to clap 4.1
- chore: update to latest dependencies
Fixed
- fix: Error if author or committer is not configured
- fix: Use correct base directory for core.hooksPaths
- fix(rename): colliding patch names
- fix(rebase): repair rebasing to a tag (#265)
- fix(branch): switch branch with detached head
- docs: Repair docstrings being confused as html
- docs: normalized spelling for --branch value
Stacked Git 2.1.0
This minor release introduces several long-awaited features, including some potentially breaking changes.
The main breaking feature is relaxed stack initialization. Instead of needing to explicitly initialize a StGit stack on a branch, patch creating commands such as stg new
and stg import
will automatically initialize the stack, if needed. Most other commands that previously required an initialized stack will now operate as if there is an empty stack if the stack is not yet initialized.
Another potentially breaking change is that the stgit.gpgsign
configuration variable is now independent of commit.gpgsign
. I.e. to have signed stack metadata commits, stgit.gpgsign
must be set to true
.
Added
- feat: Configurable push conflict policy (#60)
- feat: Add --committer-date-is-author-date option (#47)
- feat(import): Add --3way option (#36)
- feat(import): Add --directory option (#36)
Changed
- feat!: Relaxed stack initialization (#238)
- feat!: Only sign stack based on stgit.gpgsign (#238)
- fix!: Allow "---" separator in messages (#243)
- feat: More descriptive push conflict message (#60)
- feat: Avoid post-edit commits when no change
- chore: Update dependencies to latest versions
Fixed
- fix: Improved error message for uninitialized stack
- fix: Improve error for re-initialization attempt
- fix(prev): Different error message for empty stack
- fix: Accept full ref name for branches
- fix(zsh): Complete --edit and --diff for stg new
Stacked Git 2.0.4
This release makes some repairs to aliases, including documenting aliases along with all other StGit configuration variables.
Changed
- docs: Document configuration variables
- refactor: Use
is-terminal
instead ofatty
- chore: Update Cargo.lock with latest dependencies.
Fixed
- fix: Don't generate new patch name until after edit (#239)
- fix: Run shell aliases from top-level of work tree
- fix: Use
GIT_PREFIX
in built-in aliases
Stacked Git 2.0.3
This release includes a few minor bug fixes and lots of spelling corrections.
Changed
- chore: Update Cargo.lock with latest dependencies.
Fixed
- fix: improved git version parsing on MacOS
- fix: StGit-specific branch config handling
- docs: fixed many typos
Stacked Git 2.0.2
This release further improves support for sparse checkout with partial clone and worktrees. A few documentation improvements are also included.
Changed
- chore: Update Cargo.lock with latest dependencies.
- docs(init): Add long help for
stg init
(#233).
Added
- feat: Enable basic support for
extensions.worktreeconfig
to unblock sparse checkout with partial clone (#195).
Fixed
- docs: More inter-command links
- docs: Normalize quoting