NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1359 most downloaded on crates.io
Interact with git repositories just like git would
Last release 25 days ago
24 Aug 2026
Ships on a steady schedule
a new release about every 4 weeks
Nearly every release is documented
notes for 58 of 60 stable releases
12 versions withdrawn
withdrawn after publishing
4 years old
72 releases · first in 2023
One column per quarter.
add first 'debug' version of gix diff file
<csr-id-dd366a52d46078729a6e36468211b97c92c2921d/>
gix diff file<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b10cc6f)1039ae9)dd366a5)gix diff file (dbb1532)dce127e)gix-blame (8a31d88)36a846f)7059609)--since (330711d)gix-blame (e7084d8)6acca19)147eb41)16a248b)8e96ed3)
</details>fetch operations.clone operations.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c1f1bfb)c66e298)3836cc0)cc0f506)a22621d)b43ea6b)gix-packetline (4f45814)531dd19)fetch operations. (93d412c)clone operations. (4e89c19)01277a6)
</details>add gix env to print paths relevant to the Git installation.
gix blame -L start,endgix env to print paths relevant to the Git installation.gix blame to the CLI
That way it's possible to see the blame result of any file in the
repository.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
90fef01)gix blame -L start,end (4a78395)851a7c4)31d83a4). for consistency (ddddf02)gix env to print paths relevant to the Git installation. (75d689f)278125a)6ed9976)4ffe6eb)gix blame to the CLI (80e5804)
</details>A maintenance release without user-facing changes, but with some fixes in the dependency chain, namely:
gix-credentials allows credential helpers to ignore stdin, making it robust when facing helpers that don't read from stdin.gix-tempfile refers to the most recent version of tempfile without pinning it, which removes a security vulnerability.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
29a0870)e06f5f5)85f8b28)gix-url (66602bb)
</details>add first 'debug' version of gix log It's primarily meant to better understand gix blame.
gix log
It's primarily meant to better understand gix blame.--tree-favor to gix merge tree|commit.
With it one can decide which side to favor in case of
irreconcilable tree-conflicts.gix merge file now uses THEIRS instead of OURS where needed<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gix merge file now uses THEIRS instead of OURS where needed (0727b56)29cb775)gix log (c7e04e9)520c832)gix-diff (960773e)--tree-favor to gix merge tree|commit. (471e046)e8ce25f)
</details>Repository::shallow_commits() returns an uptodate list of shallow boundary commits.Repository::is_shallow() to test if a repository is shallow.<csr-id-1046ea2b3312838169aa08f30b598bf4ce2338d9/> allow to traverse the entire commit graph of shallow repos Previously, when traversing commits, we would assume to be in a shallow repository if a commit's parent could not be found in the repository.
Now we validate that assumption by reading the 'shallow' file to check if the last seen commit is on the commit boundary.
This removes is_shallow and error_on_missing_commit() on the
revision::walk::Platform as shallow commits are now known and handled
without any guesswork.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
18e72c9)6d88fd2)1046ea2)Repository::shallow_commits() returns an uptodate list of shallow boundary commits. (5bfbb9a)Repository::is_shallow() to test if a repository is shallow. (3e69535)
</details>add gix merge commit --debug This yields additional debugging information with details about detected conflicts.
gix merge commit --debug
This yields additional debugging information with details about detected conflicts.gix merge commitsgix merge tree to merge trees similarly to git merge-tree.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
0b7abfb)gix merge commit --debug (0a5993f)905e5b4)gix merge commits (4a5afc7)a876533)gix (8d590f3)3fb989b)gix merge tree to merge trees similarly to git merge-tree. (84707c2)80e006b)
</details>A maintenance release without user-facing changes, primarily for getting the progress-bar updates into cargo.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
93e75fe)895e482)0f411e9)
</details>support for listing worktrees with gix worktree list
<csr-id-28ac6572722f7ea31795dc0417521c70bcb6ec8f/> <csr-id-786bfec7c2cf25a68705b6ef09ba6390600742b8/>
<csr-id-c7213bcf2cf6be4058a78dbd86bbab4c5ad4afa7/> support for listing worktrees with gix worktree list
<csr-id-0c554e096cf2bf0a2bb91397143f524219693a3b/> add first 'debug' version of gix diff tree.
It's primarily meant to better understand gix blame.
<csr-id-9c8bc03de99e6494abd9755deef7e7be5577bce2/> add new gix cat command.
It only prints things without fuzz.
Inspired by https://youtu.be/JYH5ILv5g1g?si=bHLBPFJiZyRUTl6u&t=211.
<csr-id-3da2da9d7993adc16b19fc63e7524c768a6e2e7f/> add gix merge-file with similar features as git merge-file
<csr-id-7249291016253647c920852fb37eb9e29d615775/> gix merge-base for the CLI
For now it only supports the standard merge-base, but more derivatives
can be added easily on demand.
gix clean warning and help for worktree fixgit clean options
-r/--repositories and --skip-hidden-repositories to make it
clearer what their relationship is, avoid creating the false
impression that repositories are never deleted in the absence of
-r/--repositories, and note that --skip-hidden-repositories
is sometimes needed to preserve not only separate repositories but
the (probably rarer) case of hidden nested worktrees of the current
repository.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gix commit-graph is (49bca2a)48aa74b)0bebe52)f186c23)6777ecb)gix diff tree. (0c554e0)31bdd2e)gix cat command. (9c8bc03)5ffccd2)gix merge-file with similar features as git merge-file (3da2da9)e0b09d2)d69c617)649f588)gix merge-base for the CLI (7249291)beba720)f992fb7)ec69c88)472fe5f)786bfec)25a3f1b)b31d6b7)5871fb1)time to jiff (28ac657)a9aac4f)gix clean warning and help for worktree fix (6eb4ea6)c241422)33eacfb)gix worktree list (c7213bc)
</details>hp-tempfile-registry feature toggle to control the dashmap dependency.
And also, probably provide a better performance in certain cases.gix-pack feature toggles related to pack caches available.
Previously they would have to be configured by pulling in gix-pack, which
isn't desirable as the only crate we want to expose like that is gix-features.comfort feature toggle (default enabled) to make better progress units available.
This could be a breaking change for those who turned default-features off, as you may now
have to re-add the comfort feature to get nicer progress messages.gix-tempfile is now configured to not use the high-performance hashmap anymore.
It was hard to justify as tests actually seemed to be faster without it.<csr-id-fea8c56089e5b354669396853c5bd0f31bdf0d33/> Put progress::tree behind the progress-tree feature toggle.
It's a convenience export that implies pulling in more dependencies, so it
should be gated.
<csr-id-441f5ac4dd2f0636ec07065f8095e8bae5ce6985/> gate all signal handling behind the signals feature toggle.
This change also consolidates all signal handling into its own module called
signal to provide reusable handlers and as well as well as signal initialization.
Note that the functions to cleanup tempfiles don't interact with the signal registry,
hence they still can be called without the signals feature enabled.
Note that this change sneakily fixes a bug that could have caused a write_all()
on a tempfile that was removed by a signal to enter an infinite loop.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
signals feature toggle. (441f5ac)ea9fd1d)e6cc618)addd789)94c99c7)d686d94)gix-tempfile is now configured to not use the high-performance hashmap anymore. (b2375e3)prodash for performance improvements. (5d00324)hp-tempfile-registry feature toggle to control the dashmap dependency. (256f7d4)gix-pack feature toggles related to pack caches available. (fd7eebc)progress::tree behind the progress-tree feature toggle. (fea8c56)comfort feature toggle (default enabled) to make better progress units available. (5b0ebd2)56c005b)3522cba)gix-tempfile (c6785fc)8ef1cb2)441a64b)
</details>reproduce a diff issue and fix it Diffs could be quite wrong and this is a small repro along with the fix.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9982949)b1ec1b7)13a1ec1)550144a)1d3d22d)
</details>A maintenance release to restore MSRV (1.64) support.
A maintenance release to restore MSRV (1.64) support.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
add mailmap check similar to git check-mailmap. That way it becomes a little easier to maybe try out other special cases in the wild.
<csr-id-202f3e48a96b38d32b11d28449358c7d1f3546ff/>
mailmap check similar to git check-mailmap.
That way it becomes a little easier to maybe try out other special cases
in the wild.gix clone with --ref support.
--ref is similar to --branch, but was renamed as it also supports
tags for example.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f107014)mailmap check (3e08fa3)mailmap check similar to git check-mailmap. (2a56387)9fa1054)ecfde07)gix clone with --ref support. (9bf01e4)2f9f0ac)acc1331)bb30e52)bf5a111)src/plumbing/main.rs (4596a39)0b5dc74)202f3e4)
</details>Repository::object_cache_size() now unsets the cache if Some(0) is passed.
Previously it would fail.<csr-id-ed87f4c7c2799625bc6c7109368687908f0fb6f0/> object::tree::diff::Platform::track_rewrites(...)
The invocation of object::tree::diff::Platform::track_rewrites(Rewrites { percentage: None, ..Default::default() })
is now able to explicitly configure perfect rename tracking without percentage of equivalence.
By setting percentage = Some(<fraction>) one can set how similar both files should be to be considered related.
The same can be configured for copy-tracking, which also includes something like --find-copies-harder.
Note that by default, renames are considered if a file looks 50% similar, and copies tracking is using the same convention.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8b3e42f)Repository::object_cache_size() now unsets the cache if Some(0) is passed. (d3b9740)35415c5)object::tree::diff::Platform::track_rewrites(...) (ed87f4c)
</details>3 commits contributed to the release over the course of 1 calendar day.
bstr v1.3, use *.as_bytes() instead of .as_ref().
as_ref() relies on a known target type which isn't always present. However, once
there is only one implementation, that's no problem, but when that changes compilation
fails due to ambiguity.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
fac6bce)9604783)bstr v1.3, use *.as_bytes() instead of .as_ref(). (135d317)c56d336)f872ba8)
</details>6 commits contributed to the release over the course of 30 calendar days.
Store::at() where possible (17fea2a)<csr-id-886d6b58e4612ac21cc660ea4ddf1dd0b49d1c6e/> checkout respects options for core.protectHFS and core.protectNTFS.
This also adds gitoxide.core.protectWindows as a way to enforce
additional restrictions that are usually only available on Windows.
Note that core.protectNFS is always enabled by default, just like
it is in Git.
<csr-id-addf446f052ff74edcdb083f2b2968b313daa940/> more robustness in the face of a trampling-herd of threads loading a single index. The motivating example is here: https://github.com/praetorian-inc/noseyparker/issues/179
Previously, it was possible for a trampling herd of threads to consolidate the disk state. Most of them would be 'needs-init' threads which could notice that the initialization already happened, and just use that.
But a thread might be late for the party and somehow manages to not get any newly loaded index, and thus tries to consolidate with what's on disk again. Then it would again determine no change, and return nothing, causing the caller to abort and not find objects it should find because it wouldn't see the index that it should have seen.
The reason the thread got into this mess is that the 'is-load-ongoing' flagging was racy itself, so it would not wait for ongoing loads and just conclude nothing happened. An extra delay (by yielding) now assures it either seees the loading state and waits for it, sees the newly loaded indices.
Note that this issue can be reproduced with:
'./target/release/gix -r repo-with-one-pack -t10 --trace odb stats --extra-header-lookup'
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d6cd449)79dce79)core.protectHFS and core.protectNTFS. (886d6b5)f3d5a69)04ef31e)addf446)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4f49992)7fc00f8)59e9fac)48f5bd2)a5869e0)41d57b9)e313112)6efd0d3)6ccc88a)c9275b9)90035a3)git-testtools to gix-testtools (b65c33d)git-pack to gix-pack (1ee81ad)git-odb to gix-odb (476e2ad)git-index to gix-index (86db5e0)git-diff to gix-diff (49a163e)git-mailmap to gix-mailmap (2e28c56)git-discover to gix-discover (53adfe1)git-protocol to gix-protocol (823795a)git-refspec to gix-refspec (c958802)git-revision to gix-revision (ee0ee84)git-transport to gix-transport (b2ccf71)git-credentials to gix-credentials (6b18abc)git-prompt to gix-prompt (6a4654e)git-worktree to gix-worktree (73a1282)git-hashtable to gix-hashtable (26a0c98)git-worktree to gix-worktree (108bb1a)git-url to gix-url (b50817a)git-date to gix-date (9a79ff2)git-attributes to gix-attributes (4a8b3b8)git-config to gix-config (3a861c8)git-ref to gix-ref (1f5f695)git-lock to gix-lock (2028e78)git-tempfile to gix-tempfile (b6cc3eb)git-object to gix-object (fc86a1e)git-actor to gix-actor (4dc9b44)git-validate to gix-validate (5e40ad0)git-hash to gix-hash (4a9d025)git-features to gix-features (e2dd68a)git-glob to gix-glob (35b2a3a)git-sec to gix-sec (eabbb92)git-path to gix-path (d3bbcfc)gix changelog (find-replace issue) to indicate renaming from git-repository (f86b780)109f434)1ecfb7f)
</details>add gix status --ignored support
<csr-id-84c74ffa698d35f8395c63db6acd3d0e6700d07f/> add gix status --ignored support
<csr-id-66e87cd31c060c3f97ac685ee0541c408f600362/> add gix status --index-worktree-renames
This enables rename-tracking between worktree and index, something
that Git also doesn't do or doesn't do by default.
It is, however, available in git2.
<csr-id-61c002bc4ca5b5345c411e561fdcb492e7ae1d97/> gix status with submodule and rewrite support.
Submodule changes are now picked up as long as the submodule is
in the index.
Further, it's possible to enable rename-tracking between
index and worktree separately.
<csr-id-98b368095ec99d1bc287da7f9294a9fce424deed/> add gix is-clean|is-changed
It's a good way to compare the time it takes to run a full status
compared to a quick is-dirty check.
<csr-id-afd20caadb40b6b793f2099b7232669f9a8f9086/> gix submodules list --dirty-suffix for dirty-information
This is a submodule-centric and greatly simplified way of obtaining
describe information with dirty-suffix.
Note that status information is also possible, but it seems
hard to display nicely, which this command isn't great at
in the first place.
<csr-id-58231b418fa39ea122ef41bb7691289f5b0be855/> add gix commit describe --dirty-suffix
That way a suffix will be added depending on the dirty-state of the repository.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
55f379b)f72ecce)3e5c974)gix status --format to communicate the current format is very simple. (23bea36)gix status --ignored support (84c74ff)gix status --index-worktree-renames (66e87cd)f8ce3d0)gix status with submodule and rewrite support. (61c002b)gix is-clean|is-changed (98b3680)gix submodules list --dirty-suffix for dirty-information (afd20ca)gix commit describe --dirty-suffix (58231b4)
</details>This is the last release under this name and merely a notice to inform that git-repository from now on is gix.
Furthermore, all git-* crates belonging to the gitoxide project will be renamed to gix-*.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
2 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Your coding agent can read these notes before it upgrades. Set up the MCP server →