NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1182 most downloaded on crates.io
Borrowed and owned git hash digests used to identify git objects
Last release 12 days ago
25 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 35 of 37 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
38 releases · first in 2023
One column per quarter.
This release fixes a possibility for V1 fetches to deadlock if negotiation would span multiple rounds (see issue #882) for details.
<csr-id-bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d/>
This release fixes a possibility for V1 fetches to deadlock if negotiation would span multiple rounds (see issue #882) for details.
gix level.
This is merely a debug tool to learn about generation numbers.
All commit-graph commands now operate on a repository.<csr-id-c494cfd6f80cf273107c626d0f2cbe054db378ee/> gix --trace to also print tree-like instrumentation
<csr-id-452ed6b79ed0e12ae214af3c8cd49a87dba91c73/> gix fetch --open-negotiation-graph[=limit]
Open the negotiation graph as SVG, after optionally specifying a limit
as rendering/layouting can be very slow.
It's useful to see how the negotiation algorithm is reasoning about each commit.
<csr-id-096838ffa529148b2da3a2382a2d1fdbfe5bee5b/> gix fetch --negotiation-info to provide additional information about the negotiation phase.
<csr-id-bd32e393fedd01e27a4f6984281bcc3182c63b67/> bit revision list --svg to create a visual graph of commits.
It's mainly a test of how well layout-rs performs.
<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>
gitoxide publishable again (c16b1df)5861afb)corpus --dry-run and --task-sql-suffix and --repo-sql-suffix (4cef57d)0f973ac)gix-trace (bd6e3d7)aa16c8c)361cf96)gix --trace to also print tree-like instrumentation (c494cfd)cfd8e88)a0b4385)a4300c8)fcbda1d)gitoxide version according to what's in git (83f6466)d9e74ff)036e60a)gix fetch --open-negotiation-graph[=limit] (452ed6b)gix fetch --negotiation-info to provide additional information about the negotiation phase. (096838f)gix docs available when using cargo doc (518159d)bit revision list --svg to create a visual graph of commits. (bd32e39)fe59956)2213321)ff8d42a)750b07a)clippy::redundant-closure-for-method-calls lint (bcad5c2)8d2e6a9)gix level. (b82edc8)gix config tree (7aaaebf)
</details>Nothing published for this version
Nothing published for this version
The main attraction of this release is support for multi-round negotiations thanks to support for the standard negotiations algorithms. Further, gix i
The main attraction of this release is support for multi-round negotiations thanks to support for the standard negotiations algorithms.
Further, gix index entries now lists attributes as well, and there is the new gix attribute query sub-command in the vain of git check-attrs.
gix attributes validate to validate attributes and ignore against git as baseline.
Use this command to test the entire index for ignored paths and their attributes and use
git check-attr and git check-ignore to validate that git agrees. Collect all
mismatches and print them.--statistics for gix excludes query
With it one gets some insights into the work done to fulfil the query.gix attribute query as something similar to git check-attrs.no-repo index from-list to create an index with empty files from the given list.
The list could be created with find . -type f for example.gitoxide on docs.rs<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
just fmt (ffc1276)ae845de)gix (7983f6f)d925896)dbf8aa1)b057500)4507f94)33b7770)a849da8)gix attributes validate to validate attributes and ignore against git as baseline. (e1fcc7f)1d70213)--statistics for gix excludes query (450b232)gix attribute query as something similar to git check-attrs. (bfdcb14)no-repo index from-list to create an index with empty files from the given list. (b8db207)edeb4de)gitoxide on docs.rs (13a0f1e)jwalk to have a better comparison. (d67551d)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7 commits contributed to the release over the course of 28 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
10c58bb)ab2fee1)2cb17b2)e10d5f6)3675a8d)4c77f81)adb8328)
</details>A maintenance release without user-facing changes, just to fix installation
A maintenance release without user-facing changes, just to fix installation
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
53f880c)4d5ba23)
</details>gix index entries also prints attributes.
gix index entries also prints attributes.gix clone and gix fetch with controls for shallow repositories.ein t trace-path know accepts the trace-file alias.stdout on each write, now this is done only once.gix free index entries into gix index entries.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ed63ec0)7bd8823)f37a930)gix index entries also prints attributes. (08e8fc2)dd14a80)gix free index entries into gix index entries. (ca8ebdf)3456c84)gix-worktree (13a070f)69faad0)8d5762c)23ee47f)3d47919)9237121)ee36e5b)bbb4cb0)index.skipHash (f29f35c)3836cc0)cc0f506)c502fa8)531dd19)gix clone and gix fetch with controls for shallow repositories. (9723e1a)ein t query (d5616b6)8ef1cb2)3827ac6)ein t trace-path know accepts the trace-file alias. (f93e964)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f9fbcba)444a92b)package.include patterns more specific so they don't match ignored files (c2c917f)29c275e)b1102c2)98bae84)
</details>This release adds the new ein tool query analytics engine, which maintains a database of a git repository as acceleration data structure to run useful
This release adds the new ein tool query analytics engine, which maintains a database of a git repository as acceleration data structure to run useful queries on.
It's nothing more than an MVP, and was inspired by a program to accelerate Git-Heat-Map.
ein tool query - a git analytics engine.
A tool to build and efficiently maintain a database of information contained
in a git repository, preferably the kind of information that is expensive to obtain,
in order to facilitate queries that would be prohibitive without an accelerating
data structure.gix tree entries with rev-spec support.
Previously it wanted a tree-id, now it can derive it itself.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c389a2c)e8bf096)gix-hash (e71c703)1019b42)9327b73)
</details>2 commits contributed to the release over the course of 30 calendar days.
time improved the way one can opt-in to potential unsoundness
in their local time support, forcing the application to make that
decision at runtime.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
73372d0)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d66ac10)8bceefb)7ce3c55)f7d0975)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c9275b9)git-protocol to gix-protocol (823795a)git-features to gix-features (e2dd68a)6461c3d)git-repository to gix (7bed2a9)9e7d792)0f2ed59)
</details>Kind::all()<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cbbdef5)562e684)Kind::all() (e411413)0a333e5)c663b3f)
</details>5 commits contributed to the release over the course of 5 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7be8f90)4150203)e7511ca)gix-hash (fe9e23b)211b4fb)
</details>add sha256 Cargo feature to gix-hash crate It is an additive feature, and makes the Sha256 variant available in gix_hash::Kind.
sha256 Cargo feature to gix-hash crate
It is an additive feature, and makes the Sha256 variant available in gix_hash::Kind.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
115e208)7a2e8f1)6f43ff5)sha256 Cargo feature to gix-hash crate (76a025f)d6c5b9d)
</details>gix clone is now permitted without specifying a destination directory. Note that the implementation doesn't take into account potential redirects and
<csr-id-1d9a5e925890883e9e712db14ac82411ad2fdfc3/>
gix clone <url> is now permitted without specifying a destination directory.
Note that the implementation doesn't take into account potential redirects and renames
as it's implemented only with the first URL it sees (not the redirected ones).http.schannelCheckRevoke<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 2 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gix clone <url> is now permitted without specifying a destination directory. (b81f650)e22080e)7bba270)gix progress now usees the configuration tree as basis for data. (ea76bf5)f7b8794)1d9a5e9)b93f0c4)9e04685)tabled (7aed326)76c99f3)f8c562a)d336368)ssh related configuration variables. (3f91088)d821fc5)38ae61a)
</details>Prefix::from_hex_nonempty() to allow creating short prefixes.
This can be useful in certain situations where the set of candidate object ids
is very small.Kind as non-exhaustive
This is a follow-up to #2218 (which is a rewritten version of #2213). It
marks gix_hash::Kind as non_exhaustive. This is a breaking change
now, but will prevent further breaking changes whenever we add a new
hashing algorithm in the future.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
21fecdf)d207075)Prefix::from_hex_nonempty() to allow creating short prefixes. (a93074d)264215b)Kind as non-exhaustive (2957fa5)fbf9c39)
</details>3 commits contributed to the release over the course of 1 calendar day.
<csr-id-6f469a6fea59c88e6c69a5f94b0bc8a5977cb75b/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
bdcce5f)doc_auto_cfg feature to fix docs.rs documentation. (6f469a6)3313233)
</details>allow requiring archived scripted fixtures
allow requiring archived scripted fixtures
Add version-aware fixture loaders:
scripted_fixture_read_only_with_git_version()scripted_fixture_read_only_with_args_with_git_version()Both use normal fixture generation when the installed Git version satisfies
the caller-provided predicate. For incompatible versions, they require an
identity-matching archive, ignore GIX_TEST_IGNORE_ARCHIVES, and return None
instead of running the fixture script when no usable archive exists.
git --version each time a metadata directory is created.expand gix-testtools fixture support
Note that I did only skim through git.rs,
considering the details of the implementation secondary to the outcome.
gix.rs was refactored quite a bit, helping to provide more utilities
in other plumbing crates to help with this 'gix' avoidance.
Add deterministic repository snapshots covering HEAD, references, reachable
commits, every index stage, conflict-free index trees, and exact worktree
contents. Provide a portable form which omits platform-specific filesystem modes
for stable cross-platform assertions.
Add writable Git-version-aware fixture APIs for copy and execute creation modes.
Require archived fixtures when the selected Git is incompatible, without running
unsupported scripts or post-processing.
Use the Git executable selected by gix-path consistently for version checks,
helper commands, and fixture scripts, including PATH selection for scripts.
Harden signing fixtures with command-compatible paths, isolated homes, and
complete SSH key pairs.
git --version each time a metadata directory is created. (4314d09)gix-attributes (e11d7a2)This release also fixes compatibility issues that formerly prevented to fetch or clone form https://googlesource.com.
GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE) with git configuration.
That way it becomes more obvious where values are coming from.<csr-id-98143699bb9481b010e21647f64dcb8a74bd80ad/> auto-enabled verbosity for gix fetch/clone and add --no-verbose.
I found myself always adding (and having to remember to add) the -v flag
for long-running operations so these should be able to default to a
higher verbosity level.
To counter that, there is a new --no-verbose flag to turn that off.
<csr-id-aeb4a1d5cb76316058c7d687e26f5c7db351c09c/> add --strict option to enforce strict checking of configuration.
<csr-id-8c9c243fc574dc17b92a8e2025fbd8efdf2833da/> gix odb stats to calculate statistics on the object database.
This includes the amount of objects along with a listing of where they are
located.
<csr-id-e2b8c5dce7185b5fa194b90f32e642e5c9d1227f/> gix clone --no-tags support.
This is the same as git clone --no-tags.
<csr-id-49f39d6bb487c0254176a5082f2c7851b83952a1/> open::ReplacementObjects is removed in favor of two custom git-configuration flags.
Now it's possible to map the environment variables GIT_REPLACE_REF_BASE and GIT_NO_REPLACE_OBJECTS
to custom git configuration keys which can also be set, namely gitoxide.odb.replaceObjectsRefBase
and gitoxide.odb.noReplaceObjects.
Along with the possibility of disabling the usage of GIT_ prefixed environment variables one
reaches the previous level of control without making object replacement a special case.
<csr-id-becbd8d896a1663f1607be4e86e632773e926f1f/> represent object cache configuration like GITOXIDE_PACK_CACHE_MEMORY in git-configuration.
That way there is a unified system for how to set values, which may be overridable by configuration
variables or not.
With this changes, the explicit application of environment variables for setting the cache isn't required anymore as everything happens using git-configuration, and automatically, while providing full control like before.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ein t estimate-hours command (4c93de1)3d01252)gix odb stats to calculate statistics on the object database. (8c9c243)c57bdde)083909b)gix clone --no-tags support. (e2b8c5d)gix progress to inform about remote.<name>.tagOpt (3ebb340)70ccbb2)77ab98d)gix fetch/clone and add --no-verbose. (9814369)atty to is-terminal (7304bc1)git-repository (c4f68bf)GITOXIDE_PACK_CACHE_MEMORY in git-configuration. (becbd8d)GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE) with git configuration. (a4ac9cf)open::ReplacementObjects is removed in favor of two custom git-configuration flags. (49f39d6)9441c26)git-repository (f1a4c8b)872dc1a)--strict option to enforce strict checking of configuration. (aeb4a1d)62cae0e)git-config (1c2e755)bcd9654)
</details>oid::is_empty_tree()`` and oid::is_empty_blob()`.Kind::empty_blob()`` and Kind::empty_tree()`` methods.<csr-id-a183ed7bb1c7042aa1a2dbdb9f9619864221fd83/> Add feature flag sha1 and make it the default
Instead of providing a non-additive feature no_sha1 in the future,
if ever dependents want to build, say, a SHA-256 version only,
anticipate this today by requiring the feature sha1. For now,
since this crate is useless without support for SHA-1, omitting
the feature sha1 results in a compile error. But in the future,
this error could be removed.
Dependents that have default-features = false will see breakage,
and they will have to adjust to
default-features = false features = ["sha1"]
to recover.
enum ObjectId as non-exhaustive
This will allow adding other variants, such as for SHA-256, without
breaking dependents.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
89fb308)4da2927)b188a7d)feccdf8)6cc8464)4a0b84a)enum ObjectId as non-exhaustive (0625bb3)sha1 and make it the default (a183ed7)9365cc3)838ff95)b4812d9)772c434)58e2d18)oid::is_empty_tree()`` and oid::is_empty_blob(). ([0f20e0a`](https://github.com/GitoxideLabs/gitoxide/commit/0f20e0a542b168c212b72d5823e4a7e0b1d0095c))41c40ad)Kind::empty_blob()`` and Kind::empty_tree()`` methods. (7fca001)784c046)
</details>Make reqwest TLS backend configuration easy. We provide the choice of native-tls or rust-tls. If none is provided, the user can configure on their on
<csr-id-3ddbd2de369b521fa3f21935f10fe9c248840893/> Make reqwest TLS backend configuration easy.
We provide the choice of native-tls or rust-tls. If none is
provided, the user can configure on their on similar to how it's done
in gix.
Please note that a choice now has to be made or HTTPS will not be available, so use one of…
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
reqwest TLS backend configuration easy. (3ddbd2d)
</details>serde as dependency, when the serde feature is off
faster-hex has serde as default dependency, and was not marked with
default-features = false.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5a919c4)65037b5)c2eb0c1)bfb1c34)874cc38)serde as dependency, when the serde feature is off (0d67c85)8d4c4d1)
</details>This releases fixes gix fetch so that it is able to clone or fetch pytorch or other repositories on case-insensitive file systems.
This releases fixes gix fetch so that it is able to clone or fetch pytorch or other repositories on case-insensitive file systems.
It's also an attempt to trigger CI to build binary releases.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
665b53e)c76572b)gitoxide.http.connectTimeout for more control for git clients (2ab80e4)no_proxy environment variable support (f0625de)3d9fb6c)0ec5220)1c012f4)f5499a5)1afaebd)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e104545)5f7f805)631f07a)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cc5b696)db0b095)0bf84db)3b1bef7)c3c6504)5823b22)Cargo.toml files in workspace to gix-features bump (6315536)b5e9059)68e6b2e)1612c73)fc5faf2)269d2da)size_of_hasher test for 32-bit Windows (4cea38b)420e730)
</details>gix remote ref-map --show-unmapped-remote-refs. That way it's more obvious to see what was filtered out by ref-specs.
<csr-id-e973dfeaf17ca63385496202e9fdcdd912e20f42/> gix remote ref-map --show-unmapped-remote-refs.
That way it's more obvious to see what was filtered out by ref-specs.
It's also great to validate that server-side filtering via ref-prefix will not send refs that are referred to by symbolic refs that are not filtered out. That should be fine as it's all about objects, it's just something to deal with as we may have to deal with symbolic refs that aren't in the set of refs the server sent to us.
<csr-id-b1edb9e3537df86669714f03666f4a88e0ac3709/> diff algorithm is controlled by git configuration diff.algorithm
<csr-id-20259da4ddf9fabfb2d2bd4e2274c0ed42bdb0e5/> ein t hours allows to specify the amount of worker threads.
<csr-id-3a053284cfefe27873dcc5b4f74d63a560bb5d41/> collect stderr and print it afterwards to avoid intersection with line progress.
Previously it would happen that stderr would be printed directly and mix
with the line progress (as in -v) which also prints to stderr.
Now errors are collected and output at the end once the line renderer was already shutdown.
lock_mode from all methods dealing with reference edits.
It is now read from core.filesRefLockTimeout accordingly.gix remote --url in favor of determining the intention similar to git fetch<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>
443a75a)gix remote ref-map --show-unmapped-remote-refs. (e973dfe)diff.algorithm (30d32e7)c8ef759)stderr and print it afterwards to avoid intersection with line progress. (3a05328)clone and print once entire clone is done (9a476df)gix clone (23a5e8b)63947ae)f5e2eeb)core.checkState (8b2aba1)de13c66)gix progress (0e9bd41)d10a82e)init.defaultBranch - now used by custom initialization. (4d6d7bb)gix fetch (c47dcc6)d034882)gix remote --url in favor of determining the intention similar to git fetch (92bbe33)--url for arbitrary urls when fetching (8c7351c)gix fetch (5b72d27)fd18320)lock_mode from all methods dealing with reference edits. (3a0fb1b)7076891)3c188b2)eade88f)6abd5a4)5c0d0ab)65e6496)b42b08a)317e02a)gix progress show (92e082a)ein t hours allows to specify the amount of worker threads. (20259da)ba17db0)index.version for when we can write V4 indices. (da96d34)ad44982)1ec27f8)extension.worktreeConfig (fe1e646)c4e6849)init.templateDir to gix progress (9fab050)ea2136b)def53b3)diff.algorithm (b1edb9e)fa27570)f53f942)git-diff for a 2x speedup when calculating line changes (296f3b6)gix progress records (b05a2e7)de4fe06)6225f35)da5f63c)c8d0345)8c24386)67f2247)01ab5ca)09d767a)507dc7e)1a1e862)clone. variables (8b804a3)702a161)53acf25)f47c891)3c49400)c5c0ac5)8ef3fcb)8dadd70)b862fc5)25a7726)
</details>gix_hash::{hasher::Digest, Hasher::digest()}
Complete the transition to ObjectId returns.gix_hash<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>
b41312b)38dff41)4660f7a)4501086)a68f115)fbf6cc8)5095f44)4f2b649)b32f1f3)gix_hash::{hasher::Digest, Hasher::digest()} (65aab56)gix_hash::Hasher::finalize() (4e935ce)gix_hash (e4439aa)gix_hash (baa1430)f253f02)25ff995)16a248b)8e96ed3)8df0db2)
</details>ein tool hours -s was split into -f|--file-stats and -l|line-stats. That way more information is generated at increasingly high costs.
ein tool hours -s was split into -f|--file-stats and -l|line-stats.
That way more information is generated at increasingly high costs.ein tool hours --stat to collect additional statistics per author.
Note that these are expensive and unconditionally use threads to speed
up these computations.ein tool hours -b ignores bots.
For now it only considers bots with names containing [bot].<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
11851f3)4720666)2237495)f4d8198)ref-map sub-command. (94c2b78)gix commands will now load the git installation configuration (23d2dec)7abc0a3)gix credential (642e21f)26489d1)cf7182e)ein tool hours -b ignores bots. (5d0332f)3773b92)gix index from-tree (2fbd3df)535e967)5c05198)bc64b96)56ba481)791dd66)
</details><csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/>
oid::hex_to_buf() now returns &mut str.
This helps callers to avoid converting to UTF8 by hand.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
dea106a)1f6390c)7ec21bb)rust-version to 1.70 (17835bc)0ab4f64)oid::hex_to_buf() now returns &mut str. (c17aee6)e8b3b41)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8ce4912)bc9d994)7a40648)0f0e4fe)db5c9cf)
</details>gix remote refs to list all remote references of a suitable remote. This takes into account either a named remote, or the remote associated with the c
<csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/>
-c/--config in gixgix remote refs to list all remote references of a suitable remote.
This takes into account either a named remote, or the remote associated
with the current branch, or the default remote it could deduce or obtain
from the configuration.gix free remote ref-list in favor of gix remote refs
The functionality is the same, but the latter is built on top of a
repository which is slightly less flexible, but preferable over
maintaining a non-repo version.<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>
gix config. (19c1746)gix free remote ref-list in favor of gix remote refs (dda9957)-c/--config in gix (45a30f0)e0be6e9)df3cf18)gix remote refs to list all remote references of a suitable remote. (5d6d5ca)db4df25)gix remote refs without any implementation. (f8f1249)39d585d)bb6813a)e2ee3de)31c2351)b1c40b0)f7f136d)bd5f3e8)
</details><csr-id-64ff0a77062d35add1a2dd422bb61075647d1a36/>
<csr-id-17573779688e755a786546d5e42ab533088cd726/> remove all workspace dependencies The problem is that with them, we don't notice anymore if the crate changes, because a dependency changes. That also means that older versions of the dependency may stay even though some other crates might pick up a newer version.
Ultimately, this will lead to drift and subtle incompatibilities.
We declare this breaking to enforce a proper re-release.
<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>
3f7e8ee)795962b)64ff0a7)37c1e4c)af03832)649f588)beba720)37ba461)2e0ce50)f992fb7)ec69c88)46cd1ae)1757377)9fa1054)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b050327)52c3bbd)3e5c974)f8ce3d0)
</details>3 commits contributed to the release.
<csr-id-3bd09ef120945a9669321ea856db4079a5dab930/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
972241f)8c492d7)rust-version manifest field back to 1.65. (3bd09ef)
</details>Invert behaviour to open::Options::strict_config(), with lenient being the default. This means API users will get libgit2 behaviour but commands like
open::Options::strict_config(), with lenient being the default.
This means API users will get libgit2 behaviour but commands like gix can
change options to emulate git behaviour.--cat-file flag for gix rev parse to cat instead of resolving.gix rev previous-branches subcommandein tools to ein tool for as it's more intuitivegix rev resolve --explain<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
dbaff13)gix-config can be lenient. (6a9c58f)open::Options::strict_config(), with lenient being the default. (0235111)c4bf958)805f432)ein tools to ein tool for as it's more intuitive (edf73dd)a938986)a6d79e3)2f506c7)ce885ad)9b9ea02)6da8250)7b61506)47724c0)4e7b343)e9fcb70)
</details><csr-id-aea89c3ad52f1a800abb620e9a4701bdf904ff7d/>
ObjectId::from() in favor of ObjectId::from_bytes_or_panic().
We also add an &oid::try_from() implementation for good measure, which is hard to call in
practice but certainly not impossible.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e1aae19)e78a92b)4454c9d)aea89c3)ObjectId::from() in favor of ObjectId::from_bytes_or_panic(). (b2ded12)1691ba6)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
add Oid::is_null() - previously it was only available on ObjectId.
Oid::is_null() - previously it was only available on ObjectId.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
55d386a)d3dcbe5)dfb3f18)Oid::is_null() - previously it was only available on ObjectId. (20e56b3)5a0d93e)bb3224c)c0e72fb)b65a80b)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
68e5432)1347a54)429e7b2)ed458c0)
</details>Adjustments due to breaking changes in git_path (`4420ae9`)
gix config with section and sub-section filtering.gix config lists all entries of all configuration files git considers.
Filters allow to narrow down the output.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 3 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
0c597fe)--show-ignore-patterns to gix repo exclude query (09f904b)exclude query (9cb8385)7d98b21)cb56f12)3ff991d)gix repo exclude query (a331314)50ff7aa)gix restructuring (59b95c9)gix config with section and sub-section filtering. (eda39ec)gix config lists all entries of all configuration files git considers. (d99453e)a437abe)8e5b796)5cf08ce)0ed65da)38a8350)72876f1)ac7d99a)c9c78e8)8967fcd)f99c3b2)83585bd)1cdecbc)141c5f1)f4e1810)faaf791)git_path (4420ae9)afecb63)48b3f4a)085e76b)0700b09)89ea12b)0e9df36)229dc91)41ea8ba)05eb340)7cb1972)251b6df)98da8ba)056e8d2)fdec111)4086335)e90d3fd)
</details>dyn trait where possible.
This reduces compile time due to avoiding duplication.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8bd0456)375db06)dynification (f658fcc)dyn trait where possible. (072ee32)363ee77)
</details>preserve validation classifications after error conversion
ValidationError marker from reference, tag, submodule,gix::Error, including optional reference lookups.raise MSRV to Rust 1.88
The newly published dua-core 3.3 release used by linked-worktree removal
requires Rust 1.88, so raise every workspace crate and the advertised badge
together.
Keep the MSRV checks buildable by selecting the latest sysinfo and rusqlite
release lines that support Rust 1.88.
gix repo commit describe
It supports typical but basic flags mostly similar to the ones in git.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
<csr-id-bd86f838a304e154828fb3fa1403ea2b713f95a6/> improve hex-parsing performance. This improvementment is measurable in real-world applications.
The reason for the breaking change is that the error type changed slightly.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
30b2761)f23ea88)4a4fa0f)bd86f83)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5cb3589)2fc66b5)9064ea3)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9f942)18b0a37)aa16c8c)4f635fc)
</details>add ObjectId::is_empty_tree() as sybling of ::is_empty_blob().
ObjectId::is_empty_tree() as sybling of ::is_empty_blob().<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9a9fa96)8f15cec)ObjectId::is_empty_tree() as sybling of ::is_empty_blob(). (8d645b0)420553a)2578e57)dbf8aa1)4795fcf)3ef5c90)9375cd7)facaaf6)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<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>
91134a1)30a1a71)6ebd61e)14e64e7)
</details>Adapt to changes in gix-features which change Send + Sync to Send + Clone. This happens to allow non-sync implementations (i.e. thread-local), along w
<csr-id-4d2d433e7e98ac42db858688edac06e68ee4d10d/>
Adapt to changes in gix-features which change Send + Sync to Send + Clone. This happens to allow non-sync implementations (i.e. thread-local), along with Sync ones
which usually are Clone too as they are passed by immutable reference (which is Clone + Copy).
Option<impl Progress> in favor of impl ProgressArc around should_interrupt flagindex::verify::Mode::* variants
The hash is repository defined and not hard-codedgix mailmap verify commandein find --debug to learn why it is slow<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6e0cd6d)bcde935)89428b2)c4c5678)d2bea27)Option<impl Progress> in favor of impl Progress (bf04644)Arc around should_interrupt flag (d851bed)index::verify::Mode::* variants (c2679a0)d04dc01)1ac2c21)34ea001)9277cf8)239e7b2)8bf585d)3fc1622)a8fa53a)07e9081)8cbe85d)89b628a)6c10e09)21c2dd5)e6a3d43)613483b)73a7393)29fb0c8)0e55fbb)a39d476)5388d80)5494fb3)f23b8d2)e90c123)25da30f)0090961)7cf3545)652a0ac)90c6c5a)ein find --debug to learn why it is slow (70109be)aa51e05)ad3c803)025f157)866530a)d6a72e7)338521b)7d2e20c)b0f7328)
</details><csr-id-b83ee366a3c65c717beb587ad809268f1c54b8ad/> Rename serde1 cargo feature to serde and use the weak-deps cargo capability.
With it it's possible to not automatically declare all optional dependencies externally visible
features, and thus re-use feature names that oterwise are also a crate name.
Previously I thought that serde1 is for future-proofing and supporting multiple serde versions
at the same time. However, it's most definitely a burden I wouldn't want anyway, so using
serde seems to be the way to go into the future.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
serde1 cargo feature to serde and use the weak-deps cargo capability. (b83ee36)8dbd0a6)7f06458)cdef398)19338d9)691758a)0f747f3)
</details>make oid Hash work on 32-bit targets
oid Hash work on 32-bit targets<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
add ObjectId::empty_blob() to obtain the empty blob object.
ObjectId::empty_blob() to obtain the empty blob object.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9604783)796f298)231b268)ObjectId::empty_blob() to obtain the empty blob object. (c817626)
</details>Allow 'refactor' and 'other' in conventional messages if they have breaking changes (`4eebaac`)
<csr-id-8be4036dce4a857cc14a8b9467aaf2fc0fc2e827/> <csr-id-7926f47ebc34e11c769acfd3441ab391fc1b9b36/> <csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/>
<csr-id-3d8fa8fef9800b1576beab8a5bc39b821157a5ed/> upgrade edition to 2021 in most crates. MSRV for this is 1.56, and we are now at 1.60 so should be compatible. This isn't more than a patch release as it should break nobody who is adhering to the MSRV, but let's be careful and mark it breaking.
Note that git-features and git-pack are still on edition 2018
as they make use of a workaround to support (safe) mutable access
to non-overlapping entries in a slice which doesn't work anymore
in edition 2021.
<csr-id-c5213d2b701ca71af5f3c987647e2a0c5c4d42dd/> break delete me
<csr-id-67652cb5cf01c45291d6e117c31290c585bab9d1/> <csr-id-3363f1e61295810964ddb0c255eed87a87fe6539/> <csr-id-75b901eff177dade43a28e770920a2b2206ded69/> <csr-id-b596fa0dbbb3cc1d3ac386458ef52e2db9bca55c/> <csr-id-3373946d27c91169172e62a637a305ef1e5fbb9e/>
<csr-id-79dc0d5ba6fa31ddd5c075693ffdc6496c1eaded/> rename oid::try_from() to try_from_bytes(), add from_bytes_unchecked()
This change was done in the name of consistency, as from_bytes() is
used in many other git-* crates
<csr-id-1b75541c00b8a18000336a8a7eceae5beba1058d/> Remove Kind:Efrom_len_in_bytes() from public API
It shouldn't be encouraged to assume the hash can be deduced from its
length, also git doesn't assume this.
If that would happen, we would have other problems though, so let's hope it doesn't happen nonetheless.
<csr-id-b12ee8a97904e6e90b6c08ad9e6804ee969bff41/> Remove ObjectId::null_sha1() from public API
Use Kind::Sha1.null() instead if it's a value where the actual
repository object hash doesn't matter.
<csr-id-eaf48bd75a3b778e31695257aedfbd008769f7bb/> rename Kind::null() to null_ref() and Kind::null_owned() to null()
This naming is consistent with typical Rust APIs and the naming used
throughout the git-* crates thus far.
<csr-id-60a4eb5dd7f50949799c558a225146d442dcf936/> remove Kind::new_sha1() from public API
<csr-id-c079fbe2099bd0ba43e811e987a80ae14e15e131/> Kind::from_len_in_bytes() is infallible
<csr-id-2a799e662aa172c243b54d1df0dfc78501cb024f/> remove ObjectId::from_20_bytes() from public API
Use ObjectId::from() or ObjectId::try_from() instead.
<csr-id-53c748d7f438f57e8119cdf04402bfeaa9f2a286/> remove various SHA1 specific hex utilities in favor of unspecific new ones
to_sha1_hex(), use oid::hex_to_buf() and
oid::hex_to_buf() instead.ObjectId::from_hex(…).Prefix::from(ObjectId)
This conversion will never fail and is useful as fallback to handle
failed hash shortenings, which can now default to a prefix that
represents the original and thus unique hash.Prefix::MIN_HEX_LEN.
That way other crates can know which candidates to discard off the bat
instead of having to match on an error. It's mere convenience.Prefix::from_hex()TryFrom<&str> for Prefix
Currently there is no easy way to create a struct Prefix from a hex
string. The method Parser::from_hex() is NIY.Commit::short_id()Kind and implement TryFrom<u8>
This makes reading and writing the hash number easier for newer file
formats.Kind::from_len_in_bytes() const fnKind::len_in_bytes() method
It yields the amount of bytes needed to store the hash.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 6 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
52b38bc)e695eda)0c81769)9426db5)a517e39)4eebaac)4a9a05f)f536bad)a0bc98c)oid::short_hex() to oid::to_hex() (8be4036)2f75db2)e1861ca)ed16bce)89428b2)f7d5c7f)Kind and implement TryFrom<u8> (84e26a7)oid::try_from() to try_from_bytes(), add from_bytes_unchecked() (79dc0d5)Kind:Efrom_len_in_bytes() from public API (1b75541)ObjectId::null_sha1() from public API (b12ee8a)Kind::null() to null_ref() and Kind::null_owned() to null() (eaf48bd)Kind::new_sha1() from public API (60a4eb5)c079fbe)7331e99)ObjectId::from_20_bytes() from public API (2a799e6)cd981e2)53c748d)oid::null_sha1() replaced with Kind::null() (67652cb)ObjectId::from_borrowed_sha1() (3363f1e)ObjectId::to_sha1_hex_string() (75b901e)b596fa0)Kind::to_hex() to Kind::to_hex_with_len(); add Kind::to_hex() (3373946)Kind::from_len_in_bytes() const fn (ce673bf)Kind::len_in_bytes() method (9a0d8b8)80a4a7a)f54bf4b)a45f378)7d4d281)d09fd9b)927b2ac)b558f11)69cb6d1)cff6f9f)5bc548e)75efa79)837db62)cb83bee)bc89fc7)72b97f2)1d07934)93ac4c3)caa7a1b)bb24dc4)3dd7c43)4bf0c1a)2455178)59ab1bd)e2be868)oid (c4186b0)oid now (0b72966)oid type… (658c896)oid where possible in git-odb (68a709e)eecd664)be84b36)6f97063)ca78d15)b3fc365)59c3d45)fdbe704)4805cfc)git_hash::*::Digest to Id (188d90a)rust-version to 1.64 (55066ce)6ccc88a)c9275b9)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-commitgraph to gix-commitgraph (f1dd0a3)git-mailmap to gix-mailmap (2e28c56)git-discover to gix-discover (53adfe1)git-chunk to gix-chunk (59194e3)git-bitmap to gix-bitmap (75f2a07)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-command to gix-command (d26b8e0)git-packetline to gix-packetline (5cbd22c)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-quote to gix-quote (648025b)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-hash to gix-hash (416d1dc)git-features to gix-features (e2dd68a)git-glob to gix-glob (35b2a3a)git-sec to gix-sec (eabbb92)git-path to gix-path (d3bbcfc)git-config-value to gix-config-value (622b3e1)c196d20)7c846d2)1e544e8)39ed9ed)bac57dd)hex_to_id() (6fa950d)1fea18f)7717170)3bafb79)747008d)6b9632e)95ad56c)269d59e)bcd9654)b2c301e)e4648f8)0e4462d)3d8fa8f)104d922)d232567)d686020)b9937ad)25a7726)29a043b)535e967)5c05198)1f6e5ab)5869e9f)da0716f)71cb9ea)quickerror with thiserror (7926f47)400c6cb)bc64b96)cfa1440)4974eca)e2ee3de)31c2351)b1c40b0)f7f136d)5176771)bd5f3e8)232784a)c4bf958)919923c)de61c4d)4bd747c)2f506c7)ce885ad)9b9ea02)6da8250)7b61506)4737b1e)3c50625)085e76b)238581c)89ea12b)41ea8ba)a417177)bb424f5)a2c8969)a22b1d8)598c853)654cf39)e043807)9cf0c7b)0866e89)TryFrom<&str> for Prefix (89f1b27)f0cbb24)7cf3545)5849d5b)0db19b8)b7e3a4a)025f157)373cbc8)8900d69)d2e2ea0)4624725)6946125)d8925f5)0e02953)c5213d2)59ffbd9)a474395)21541b3)49f5453)6efd90d)a985491)d826370)5e0edba)ae02dab)e1964e4)9c2edd5)21f187e)5c7285e)9175085)6037900)6200ed9)866f86f)aea6cc5)e9665c7)3fee661)b4f94f8)86b6c24)327a107)4ec09f4)d1b4436)96938be)7136854)4224c5b)124c171)9803041)
</details>Your coding agent can read these notes before it upgrades. Set up the MCP server →