GitCore 0.2.5

dotnet add package GitCore --version 0.2.5
                    
NuGet\Install-Package GitCore -Version 0.2.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GitCore" Version="0.2.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GitCore" Version="0.2.5" />
                    
Directory.Packages.props
<PackageReference Include="GitCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add GitCore --version 0.2.5
                    
#r "nuget: GitCore, 0.2.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package GitCore@0.2.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=GitCore&version=0.2.5
                    
Install as a Cake Addin
#tool nuget:?package=GitCore&version=0.2.5
                    
Install as a Cake Tool

GitCore

Pure managed C# implementation for reading from Git repositories.

Features

  • Portable and simple
    • No dependencies on native code.
  • Reading from local Git repositories
    • Resolve HEAD and other references to commit SHAs.
    • Load all files from any commit's tree.
    • Load files from a specific subdirectory within a commit's tree.
    • Supports both loose objects and pack files.
    • Reads indexed packs with 64-bit offsets without loading complete packs.
    • Supports worktrees, bare repositories, linked worktrees, and alternate object stores.
    • Incremental tree traversal with early file and subtree pruning.
  • Cloning via Git Smart HTTP
    • Efficient partial cloning of subdirectories.
    • Configurable API for caching git objects to make cloning more efficient.

Usage

NuGet: https://www.nuget.org/packages/GitCore/

dotnet  add  package  GitCore

Load files from a local Git repository

var gitDir = Path.Combine(repoRootDir, ".git");

// Load all files from the current HEAD commit
var filesAtHead = GitCore.LoadFromLocalFiles.LoadTreeContentsFromHead(gitDir);

// Or resolve HEAD and load from a specific commit
var commitSha = GitCore.LoadFromLocalFiles.ResolveHead(gitDir);
var filesAtCommit = GitCore.LoadFromLocalFiles.LoadTreeContentsFromCommit(gitDir, commitSha);

// Load only files under a specific subdirectory (paths relative to subdirectory)
var subdirFiles =
    GitCore.LoadFromLocalFiles.LoadSubdirectoryContentsFromHead(
        gitDir,
        ["implement", "Pine.Core"]);

// Or from a specific commit
var subdirFilesAtCommit =
    GitCore.LoadFromLocalFiles.LoadSubdirectoryContentsFromCommit(
        gitDir,
        commitSha,
        ["implement", "Pine.Core"]);

// Resolve any reference (branch, tag, etc.)
var branchSha = GitCore.LoadFromLocalFiles.ResolveReference(gitDir, "refs/heads/main");

// Load the full in-memory object store
var repository = GitCore.LoadFromLocalFiles.LoadRepository(gitDir);

Incrementally traverse a local repository

LocalGitRepository owns pack handles and bounded caches, so keep it open while resolving related objects and dispose it afterward. Selection runs before a subtree or blob is loaded.

using var repository =
    GitCore.LocalGitRepository.Open(
        repoRootDir,
        new GitCore.LocalRepositoryOptions
        {
            MaximumCachedObjectBytes = 128 * 1024 * 1024,
            MaximumMaterializedObjectSize = 64 * 1024 * 1024
        });

var commitId =
    repository.ResolveHead()
    ?? throw new InvalidOperationException("HEAD cannot be resolved.");

await foreach (
    var file in repository.EnumerateTreeAsync(
        commitId,
        new GitCore.TreeTraversalOptions
        {
            SelectFile =
                file =>
                    file.Name is ".order" ||
                    file.Name.EndsWith(".md", StringComparison.OrdinalIgnoreCase)
                        ? GitCore.TreeFileSelection.Include
                        : GitCore.TreeFileSelection.Skip,
            SelectSubtree =
                subtree =>
                    subtree.Path.Contains(".attachments", StringComparer.OrdinalIgnoreCase)
                        ? GitCore.TreeSubtreeSelection.Skip
                        : GitCore.TreeSubtreeSelection.Descend
        }))
{
    await using var destination = CreateDestination(file.Path);
    await file.CopyContentToAsync(destination);
}

LookupObject returns Found, Missing, or MissingPromised together with a typed, context-rich error. GitCore never fetches a missing object implicitly. Applications can opt into FetchMissing or Custom and supply a MissingObjectProvider, retaining control of networking, credentials, cancellation, and persistence. Storage and limit failures use typed exceptions such as GitObjectNotFoundException, InvalidPackIndexException, InvalidPackObjectException, GitObjectSizeLimitException, and GitResourceLimitException; each exposes a GitErrorContext.

Load files from a remote Git repository

var subdirectoryContents =
    await GitCore.LoadFromUrl.LoadSubdirectoryContentsFromGitUrlAsync(
        gitUrl: "https://github.com/pine-vm/pine.git",
        commitSha: "c837c8199f38aab839c40019a50055e16d100c74",
        subdirectoryPath: ["guide"]);
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on GitCore:

Package Downloads
Pine-Integration

Elm DevTools and runtime

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on GitCore:

Repository Stars
pine-vm/pine
Cross-platform runtime environment for the Elm programming language
Version Downloads Last Updated
0.2.5 91 8/7/2026
0.2.4 5,111 3/28/2026
0.2.3 422 3/15/2026
0.2.2 5,866 11/10/2025
0.2.1 150 11/7/2025
0.2.0 187 11/6/2025
0.1.0 200 10/28/2025
0.0.1 190 10/27/2025