Description
Summary
RFC: None
Documentation: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#gitoxide
Issues:
Z-gitoxide
Original issue:
- shallow clones Allow specifying shallow clones in .config #1171
- slow on
file://
Cargo-update: exceedingly slow progress on update when local registry/index is used and git-fetch-with-cli is false #9167 - slow on fetch Resolving deltas takes long time #11014
- high CPU usage High CPU usage when cargo updates its index #9215
- high memory usage Cargo eating all RAM during aarch64 build under Docker on x86-64 #10583
- publish failure due to git-ignored
.DS_Store
cargo-package: list of dirty files contains ignored files #8407
With the ‘gitoxide’ unstable feature, all of the specified git operations will be performed by the gitoxide
crate instead of git2
. This allows git2
to be replaced in full.
Steps
Unstable feature sub-categories:
-
fetch
: all fetches are done with gitxide (gitoxide integration: fetch #11448) -
shallow_index
: the crates index will be a shallow clone (support for shallow clones and fetches withgitoxide
#11840) -
shallow_deps
: git dependencies will be a shallow clone (support for shallow clones and fetches withgitoxide
#11840) -
checkout
: plain checkouts with gitoxide (including submodule handling) -
package
: status checks, untracked files, excluded files
Further tasks
- short-hash handling can be done by
gix_hash::Prefix
. - optimize dependencies to only include those that
cargo
actually uses. - When specifying a dependency with
rev
but nothing found, cargo with shallow fetch should fetch full history as a fallback.
Unresolved Issues
- work with https://rsproxy.cn (the proxy seems to work different making naive negotiations fail due to multi-round negotiation)
- all features as listed in this
gitoxide
tracking issue to be able to replacegit2
in full - support for the
file://
protocol without relying on thegit
binary - support of the
ssh://
protocol without relying on thessh
binary - double-check and validate that authentication works similarly to
git2
or if unfeasible, assure users have a migration path. How to deal with this correctly is still to be determined. - transitive dependency
tempfile
is pinned to~3.3.0
temporarily (see [email protected]) -
A-git
Area: anything dealing with git might contain more potential blockers- take a look at all of these and either fix them, resolve them, or store them in
gitoxide
itself
- take a look at all of these and either fix them, resolve them, or store them in
Future Extensions
Some features not in libgit2 are good candidates for future extensions
- sparse checkout Cargo build crash in project with git Split Index #10150
- split index Add support for sparse git checkouts #11165
- git-lfs integration Git dependency with LFS objects #9692
About tracking issues
Tracking issues are used to record the overall progress of implementation.
They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions.
A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature.
Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.
Implementation history
Metadata
Metadata
Assignees
Labels
Type
Projects
Status