git-ecosystem/git-credential-manager · error · KeyNotFoundException

Git configuration entry with the name

Error message

Git configuration entry with the name '{name}' was not found.

What it means

This extension method Get(IGitConfiguration, GitConfigurationLevel, string) performs a TryGet for a raw configuration entry and, if absent, throws KeyNotFoundException naming the entry. It is the throwing convenience wrapper over TryGet for callers who treat a missing entry as an error rather than an expected state.

Solutions

  1. Use TryGet instead of Get when absence is acceptable, and handle the false return.
  2. Verify the entry exists with `git config --show-origin --get-all <name>` and at the level you query.
  3. Correct the entry name or set the value at the intended level: `git config --global <name> <value>`.
  4. Check whether the value lives at another level and query GitConfigurationLevel.All.

Example fix

// before
string helper = config.Get(GitConfigurationLevel.Global, "credential.helper"); // throws if unset
// after
if (config.TryGet(GitConfigurationLevel.Global, GitConfigurationType.Raw, "credential.helper", out string helper))
{
    // use helper
}
else
{
    helper = null; // or fall back to another level
}
Defensive patterns

Strategy: try-catch

Validate before calling

bool exists = config.TryGet(level, GitConfigurationType.Raw, name, out _);
if (!exists) { /* set a default or prompt the user */ }

Try / catch

try
{
    value = config.Get(level, name);
}
catch (KeyNotFoundException ex) when (ex.Message.Contains($"'{name}'"))
{
    value = defaultValue; // or surface a friendly 'setting not configured' message
}

Prevention

When it happens

Trigger: Calling the Get extension with a name that has no value at the given configuration level — e.g. `config.Get(GitConfigurationLevel.Global, "credential.helper")` when that key was never set at global scope.

Common situations: Assuming a setting exists because it is set at a different level (Local vs Global); typos in entry names; expecting multi-valued entries to resolve via Get when only TryGet/GetAll handle them; fresh machines without the expected git config.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of git-ecosystem/git-credential-manager@e8ce762cd0 (2026-09-11). Data as JSON: /api/errors/11dca46cde8eade6. Report an issue: GitHub.

Appendix: source

Thrown at src/Core/GitConfiguration.cs:980

        /// <param name="cb">Callback to invoke for each matching configuration entry.</param>
        public static void Enumerate(this IGitConfiguration config, string section, string property, GitConfigurationEnumerationCallback cb)
        {
            Enumerate(config, GitConfigurationLevel.All, section, property, cb);
        }

        /// <summary>
        /// Get the value of a configuration entry as a string.
        /// </summary>
        /// <exception cref="System.Collections.Generic.KeyNotFoundException">A configuration entry with the specified key was not found.</exception>
        /// <param name="config">Configuration object.</param>
        /// <param name="level">Filter to the specific configuration level.</param>
        /// <param name="name">Configuration entry name.</param>
        /// <returns>Configuration entry value.</returns>
        public static string Get(this IGitConfiguration config, GitConfigurationLevel level, string name)
        {
            if (!config.TryGet(level, GitConfigurationType.Raw, name, out string value))
            {
                throw new KeyNotFoundException($"Git configuration entry with the name '{name}' was not found.");
            }

            return value;
        }

        /// <summary>
        /// Get the value of a configuration entry as a string.
        /// </summary>
        /// <exception cref="System.Collections.Generic.KeyNotFoundException">A configuration entry with the specified key was not found.</exception>
        /// <param name="config">Configuration object.</param>
        /// <param name="name">Configuration entry name.</param>
        /// <returns>Configuration entry value.</returns>
        public static string Get(this IGitConfiguration config, string name)
        {
            return Get(config, GitConfigurationLevel.All, name);
        }

        /// <summary>

View on GitHub (pinned to e8ce762cd0)