GitTools / GitTools/GitVersion
v7.1: remove LibGit2Sharp and native binaries
Nobody has claimed this yet.
- Dominant language
- C#
- Stars
- 3.1k
- Forks
- 659
- Avg merge
- 13h 15m
- Merged PRs (30d)
- 51
Description
Summary
Remove LibGit2Sharp and all shipped native Git binaries in GitVersion v7.1, after the managed backend ships as the v7.0 default under #5135.
Part of #5031. The release and selector lifecycle is governed by #5135, with final environment-variable cleanup in v8 tracked by #5136.
Remove the legacy backend
- Delete
src/GitVersion.LibGit2Sharpandnew-cli/GitVersion.Core.Libgit2Sharp. - Re-point any remaining source links or consumers to the managed backend.
- Drop LibGit2Sharp and native-binary package references.
- Add packaging assertions proving shipped packages contain no
runtimes/**/native/*entries. - Register the managed backend directly at production composition roots.
Remove dual-backend validation scaffolding
- Collapse the unit-test
git_backendmatrix to managed-only execution. - Collapse Docker and artifact tests to one managed-backend path.
- Remove backend inputs and environment forwarding from reusable workflows/actions and build utilities.
- Delete dual-backend parity tests and libgit2-only test visibility grants.
- Remove corpus tooling whose purpose is comparing managed and libgit2 results.
- Keep managed-only tests that originated from parity work.
Retain the v7 selector compatibility shell
Do not remove recognition of GITVERSION_GIT_BACKEND in this issue:
GITVERSION_GIT_BACKEND=libgit2fails with an actionable message that the backend was removed in v7.1.GITVERSION_GIT_BACKEND=managedremains accepted as a no-op throughout v7.x so explicit v7.0 opt-in automation keeps working.- The selector and its compatibility diagnostics are removed in v8 by #5136.
The implementation no longer performs backend selection after this issue; only the v7 compatibility validation remains.
Documentation
- Update the managed-Git design/status and v6-to-v7 migration documentation to show managed as the v7.0 default and LibGit2Sharp removal in v7.1.
- Document the v7.1 error for
GITVERSION_GIT_BACKEND=libgit2and the v8 removal tracked by #5136.
Acceptance criteria
- Shipped packages contain no LibGit2Sharp assemblies or native Git binaries.
- Production and CI use only the managed backend.
- No dual-backend selection or comparison infrastructure remains, apart from the v7 environment-variable compatibility validator.
- Legacy selection fails clearly and explicit
managedremains harmless in v7.x.
Cleanup inventory from the v7.0 selector branch
The following inventory comes from arturcic:feature/v7-feature-selectors at 54adbb24e, the implementation of #5135. Implementation PR: #5189, opened from the fork after all four fork workflows passed on that commit. The inventory describes the PR branch; completion of #5135 remains a prerequisite until the PR is merged.
Branch additions relevant to backend removal
-
src/GitVersion.Core/Git/GitBackend.csnow defaults to managed Git and shares trimmed/case-insensitive/blank-default validation throughsrc/GitVersion.Core/FeatureSelector.cs, usingWarningException. In v7.1, replace thelibgit2selection path with actionable removal guidance; keep explicitmanagedaccepted until v8. -
src/GitVersion.App/FeatureSelections.cscaptures the backend beforeCliHost.csregisters it andGitVersionApp.cslogs the captured value. Remove the libgit2 registration/logging branch while retaining truthful managed diagnostics and stderr isolation. - Review
new-cli/GitVersion.Common/GitVersion.Common.csproj: the new shared helper is explicitly source-linked because the Git backend selector is source-linked. Keep that dependency buildable until #5136 removes the selector/helper. - Update
src/GitVersion.Core.Tests/Core/GitBackendSelectorTests.cs: replace libgit2 success cases with removal-error cases, retaining managed/default/empty/padded/case-insensitive and unknown-value validation. - In
src/GitVersion.App.Tests/FeatureSelectorTests.cs, reduceCompositionRegistersSelectedImplementationsto managed-only registration after this cleanup. Coordinate v6 parser/configuration cases with #5188. AdaptSelectionLogUsesCapturedValueswithout losing the captured-state assertion. - In
src/GitVersion.App.Tests/ExecFeatureSelectorTests.cs, retire libgit2 runtime/migration variants inSelectorCombinationsCalculateAndLogWithoutPollutingOutputandMigrationRetainsYamlStdoutWithEitherConfigurationAndBackend; add an actionable libgit2-removal stderr case toInvalidSelectorsFailBeforeHelpWithActionableStderr. Preserve machine-readable output and default-selection tests. - Remove backend matrices from workflows/artifact tests only with the implementation cleanup.
build/common/Utilities/DockerContextExtensions.csnow correctly documents the absent-selector default as managed.
The v7.0 branch has tests for every parser/configuration/backend combination and concrete registered implementation. Remove the obsolete alternatives rather than deleting the whole selector/output-isolation suite. Selector variables and common validation are removed only in #5136 (v8).
Output-isolation regression added during #5189 review
- Preserve the
buildServerdimension inExecFeatureSelectorTests.SelectorCombinationsCalculateAndLogWithoutPollutingOutput: JSON, single-variable and show-config stdout must stay free of diagnostics even when build-server output is also selected. This dimension is independent of the parser/configuration/backend selectors being retired. - Retain consistent stderr routing for console logs in
ServiceCollectionExtensions.ConfigureLogger. Build-server integration commands keep their existing output channel; diagnostic logs must not move back to stdout during cleanup. - Keep CLI help (
ArgumentParserand, until legacy removal,legacy_help.md) and the CLI/migration documentation consistent with stderr logging.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by verifying the managed-backend changes in #5135 and reviewing the listed selector files, composition roots, workflow utilities, and backend selector tests. Trace the packaging and CI paths, then remove the legacy implementation and dual-backend infrastructure while preserving v7 selector compatibility, managed-only execution, stderr behavior, and tests proving packages contain no native binaries.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, git
- Domain
- backend, build-system, ci-cd, cli, devtools, release
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 28/100