Skip to content

fix(config): enable file include in scoped queries - #2345

Merged
mjcheetham merged 3 commits into
git-ecosystem:mainfrom
becm:scope-includes
Sep 14, 2026
Merged

mjcheetham merged 3 commits into
git-ecosystem:mainfrom
becm:scope-includes

Conversation

@becm

@becm becm commented May 14, 2026 •

Copy link
Copy Markdown
Contributor

Avoid duplication of entries already present in included files:

  • enable config cache for Raw values in all Git versions supporting --show-scope
  • consistent include of files in Git config queries with scope limit
  • add test for file includes

Improves consistency regarding include behavior and

Fixes #2342
Fixes #2328
Fixes #1696
Fixes #1337

@becm
becm requested a review from a team as a code owner May 14, 2026 16:51
@derrickstolee

Copy link
Copy Markdown
Contributor

@becm Thanks for identifying this key piece that connects to several issues. Could you add a test to demonstrate the behavior change to prevent regressions in the future?

@becm
becm marked this pull request as draft May 14, 2026 18:11
@becm

becm commented May 14, 2026

Copy link
Copy Markdown
Contributor Author

@derrickstolee sadly only the 1st step, since:

  • the assignment seems to be unconditional
  • I did not even manage to get all instances where the --list request is issued.

@becm
becm force-pushed the scope-includes branch from 4949cdf to 7e80d8b Compare May 14, 2026 22:17
@becm becm changed the title fix(config): enable file include in scoped query fix(config): avoid config duplications May 14, 2026
@becm
becm force-pushed the scope-includes branch from 7e80d8b to 5070c2b Compare May 14, 2026 22:40
@becm

becm commented May 16, 2026

Copy link
Copy Markdown
Contributor Author

@derrickstolee since the --include stuff is dependent on partnered Git version and file setup, I'd have no idea how to attempt a proper test (existing examples just operate on unrelated mock data).

Will try to implement a test for (abstract) config data with the (hopefully) resolved corner case of configure.

@becm
becm force-pushed the scope-includes branch from 5070c2b to 4c486f0 Compare May 22, 2026 09:53
@becm becm changed the title fix(config): avoid config duplications fix(config): enable file include in scoped queries May 22, 2026
@becm

becm commented May 22, 2026

Copy link
Copy Markdown
Contributor Author

Reverted PR to primary goal, will tackle git-credential-manager configure issue in separate task.

@derrickstolee I'll try to add a test for file inclusion (global scope).

@xz2m9kg2cw-oss

This comment was marked as spam.

@becm
becm marked this pull request as ready for review May 22, 2026 16:20
@becm

becm commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

@mjcheetham any further actions to be taken to accept this?

This change will essentially harmonizes behavior before and after Git 2.54 .
#318 changed the default includes behavior by splitting global and local.
#2268 basically introduced holistic config parsing with --show-scope again.

@becm

becm commented Jul 10, 2026 •

Copy link
Copy Markdown
Contributor Author

@derrickstolee it seems git-credential-manager only ever uses GitConfigurationType.Raw (in non-test code).

Would it be possible to introduce a further code path for Git 2.26+ without the --no-type argument that only uses/generates raw cache and only depends on --show-scope?

This would be an extension or (for non-ancient Git versions) a replacement for the current PR.

@dscho

dscho commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

The way I read this change, it constitutes a change of behavior. A good one, granted, but one that has a high potential of affecting existing users' setups (especially complex setups). As such, I'd be much more comfortable to make this behavioral change part of a major version bump. Seeing as v3.x is starting to take concrete shape, I would consider that version to be the natural inflection point to integrate this here PR.

@becm

becm commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

@dscho behavior change already happened for 2.8.0 with #2268 and #2296 for certain newer Git versions.

This combination effectively uses --show-scope and full config parsing again (which has further impacts).
So this would be an attempt to harmonize behavior in a 2.8.1 for older Git versions.

@dscho

dscho commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

behavior change already happened for 2.8.0 with #2268 and #2296 for certain newer Git versions.

@becm sure, but the way I see it was that this was an inadvertent behavioral change. Here, we are aware of the change. That makes a huge difference.

@becm

becm commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor Author

@dscho the problem is inconsistent behavior when different Git versions are involved.

So a "bugfix" is to intentionally lean into the (unintended) change.
The less desirable option would be to revert the introduction of the config cache.

If adding config cache did not enforce --type support (only GitConfigurationType.Raw is used at present)
the new approach would already be applicable down to Git v2.26 (introduction of --show-scope).

@dscho

dscho commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Now that main targets v3.x, I think this change should go in.

@becm

becm commented Sep 1, 2026 •

Copy link
Copy Markdown
Contributor Author

If there is serious intent to merge, I'd invest work to submit a better (more extensive) approach.
The code paths requiring --type are only used in test code so there are 2 viable options:

  • drop the support for typed config cache (less complex code) or
  • add separate version checks for useRawCache and useTypedCache
    (and skip the --no-type option) for the Raw config type.

Only using --includes still has a issues when using includeif.hasconfig
→ local config can effect behavior in global scope (#2328)

The approach using --includes would still be applicable for ancient Git versions.

@becm

becm commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

Revised for v3.x with cache enabled for GitConfigurationType.Raw starting with Git v2.26.
Arguments to git config invocations adjusted to:

  • allow use of raw types with older Git versions missing config type support
  • use --includes argument for scoped config queries to get closest match to cached results.

@dscho

dscho commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

@becm thank you for rebasing! @mjcheetham and I should be able to focus on getting this merged this coming week.

@mjcheetham mjcheetham left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good so far, but a few issues at the moment.

Comment thread src/Core/GitConfiguration.cs
Comment thread src/Core.Tests/GitConfigurationTests.cs Outdated
redirect global config location
test special conditional global include based on local Git remote value
verify unconditional include directive for local scope
split Git version checks for support of "raw" and "typed" config listing
use compatible argument to create config listing in older Git versions
drop `--no-type` for Raw values (default) to support older Git versions
match query results of `ConfigCache` as close as possible
@becm
becm requested a review from mjcheetham September 13, 2026 00:50

@mjcheetham mjcheetham left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for persisting with this!

@mjcheetham
mjcheetham merged commit 7468fa8 into git-ecosystem:main Sep 14, 2026
25 checks passed
@becm
becm deleted the scope-includes branch September 14, 2026 20:19
tak848 pushed a commit to tak848/dotfiles that referenced this pull request Oct 12, 2026
…nager to v3 (#981)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github:git-ecosystem/git-credential-manager](https://redirect.github.com/git-ecosystem/git-credential-manager)
| tools | major | `v2.9.1` → `v3.0.1` |

---

### Release Notes

<details>
<summary>git-ecosystem/git-credential-manager
(github:git-ecosystem/git-credential-manager)</summary>

###
[`v3.0.1`](https://redirect.github.com/git-ecosystem/git-credential-manager/releases/tag/v3.0.1):
GCM 3.0.1

[Compare
Source](https://redirect.github.com/git-ecosystem/git-credential-manager/compare/v3.0.0...v3.0.1)

Git Credential Manager 3.0 brings native ahead-of-time compilation,
Microsoft authentication broker support across Windows, macOS, and
Linux, and a refreshed terminal experience.

### Changes since 3.0.0

- **(Bug fix)** Prompt for default OS account on Microsoft DevBox
([#&#8203;2459](https://redirect.github.com/git-ecosystem/git-credential-manager/issues/2459))
- **(Bug fix)** Restore Entra broker parent window handling
([#&#8203;2464](https://redirect.github.com/git-ecosystem/git-credential-manager/issues/2464))
- **(Feature)** Support `authtype` Git capability
([#&#8203;2457](https://redirect.github.com/git-ecosystem/git-credential-manager/issues/2457))
- **(Feature)** Add console parent window parenting for non-Entra UI
([#&#8203;2465](https://redirect.github.com/git-ecosystem/git-credential-manager/issues/2465))
- Drop Windows x86 release binaries
([#&#8203;2456](https://redirect.github.com/git-ecosystem/git-credential-manager/issues/2456))

**Changelog:** [v3.0.0...v3.0.1][point1-changelog]

### Changes since 2.9.1

> \[!IMPORTANT]
> This release changes supported operating systems and the default Azure
Repos authentication experience. Review the breaking changes before
upgrading.

#### Breaking changes and upgrade notes

##### Updated platform and .NET requirements

GCM now targets **.NET 10 on all platforms**. Windows builds no longer
use .NET Framework.

| Platform or installation method | Requirement |
| ------------------------------- |
--------------------------------------------------------- |
| Windows | Windows 10 or later; Windows Server 2016 or later |
| macOS | macOS 14 or later |
| Linux | A distribution supported by .NET 10 |
| .NET tool | Install the .NET 10 SDK before installing or updating GCM
|

See the [supported environments][supported-environments] and [.NET 10
support matrix][dotnet-support] for details. Standalone platform
packages do **not** require a separate .NET installation.

**Windows 7 and Windows 8.x are no longer supported by GCM 3.x.** GCM
2.9.x will receive minimal, security-only maintenance for those systems,
but no new features. Upgrading Windows is recommended.
([git-ecosystem/git-credential-manager#2365][pr-2365],
[git-ecosystem/git-credential-manager#2367][pr-2367])

##### Azure Repos uses OAuth tokens by default

GCM now returns Microsoft identity **OAuth tokens**, rather than
creating personal access tokens (PATs), by default for Azure Repos.
OAuth tokens are automatically refreshed as needed.

Explicit credential-type settings are still respected. If you need the
previous PAT behavior, set:

```shell
git config --global credential.azreposCredentialType pat
```

The equivalent environment variable is `GCM_AZREPOS_CREDENTIALTYPE=pat`.
See [Azure Repos users and tokens][azrepos-tokens].
([git-ecosystem/git-credential-manager#2449][pr-2449])

##### Microsoft authentication uses the OS broker by default

Broker integration is now enabled by default wherever supported, rather
than requiring an opt-in. This applies to Microsoft authentication, such
as Azure Repos; it does not change authentication for GitHub, Bitbucket,
or GitLab.

On macOS, broker authentication requires Company Portal and device
enrollment. On Linux, it requires the supported Intune setup, a GNOME
desktop, and Microsoft Edge; headless and WSL environments do not
support the Linux broker.

> \[!WARNING]
> Depending on your organization's policies, broker sign-in can prompt
you to join or enroll your device. On Windows, signing in with a
personal Microsoft account can also affect the account linked to your
local Windows user. Review the [broker documentation][broker] before
proceeding, especially on personal devices.

To opt out:

```shell
git config --global credential.msauthUseBroker false
```

The equivalent environment variable is `GCM_MSAUTH_USEBROKER=false`.
When the broker is in use, it takes precedence over
`credential.msauthFlow`.
([git-ecosystem/git-credential-manager#2449][pr-2449])

##### Azure Repos uses a dedicated GCM Entra application

GCM now signs in using its own first-party Microsoft Entra application
instead of the Visual Studio application. This enables broker support on
macOS and Linux, in addition to Windows.

If you encounter a client-application configuration error, GCM provides
guidance for retrying with the legacy application; it does **not**
silently switch back. For a one-command compatibility retry:

```shell
git -c credential.azreposUseLegacyClientId=true fetch
```

Please report the original failure if this workaround succeeds. The
legacy application does not support broker authentication on macOS or
Linux. Managed identity, service-principal, and workload-identity
federation flows are unaffected by the application change.

The undocumented developer overrides `credential.azreposDevClientId` and
`credential.azreposDevAuthorityBaseUri`, and their environment-variable
equivalents `GCM_DEV_AZREPOS_CLIENTID` and
`GCM_DEV_AZREPOS_AUTHORITYBASEURI`, have been removed. The
[legacy-client setting][legacy-client] is a focused compatibility
option, not an arbitrary client-ID or authority override.
([git-ecosystem/git-credential-manager#2416][pr-2416])

##### The embedded Microsoft sign-in web view has been removed

The Windows-only embedded web view depended on .NET Framework and is no
longer available. Use the broker, system browser, or device-code flow
instead. If you previously forced `credential.msauthFlow=embedded` or
`GCM_MSAUTH_FLOW=embedded`, change it to `auto`, `system`, or
`devicecode`. Disable broker integration as described above if you
specifically need to force a non-broker flow.
([git-ecosystem/git-credential-manager#2365][pr-2365])

##### Terminal and diagnostic output has changed

Terminal selection prompts now use arrow-key navigation instead of
numbered input, and `diagnose` has a new output format. Automation that
drives interactive menus or parses diagnostic text may need updating.
Git's credential-protocol input and output remain separate from
interactive prompts.
([git-ecosystem/git-credential-manager#2377][pr-2377],
[git-ecosystem/git-credential-manager#2425][pr-2425])

#### Features and improvements

- **Native ahead-of-time builds.** Published platform packages compile
GCM to native code to reduce startup overhead. The .NET tool remains a
framework-dependent distribution.
([git-ecosystem/git-credential-manager#2366][pr-2366],
[git-ecosystem/git-credential-manager#2367][pr-2367])
- **Cross-platform Microsoft single sign-on.** The authentication broker
can reuse OS accounts on supported Windows, macOS, and Linux
installations. When a default OS account can be used, GCM asks for
confirmation unless automatic use is explicitly enabled, or enabled by
default in environments such as Microsoft Dev Box. Set
`credential.msauthUseDefaultAccount=false` to skip the default-account
attempt. See the [broker documentation][broker].
([git-ecosystem/git-credential-manager#2379][pr-2379],
[git-ecosystem/git-credential-manager#2416][pr-2416])
- **Optional isolated Azure Repos token cache.** Set
`credential.azreposUseMicrosoftSharedCache=false`, or
`GCM_AZREPOS_USE_MSFT_CACHE=false`, to use a GCM-specific cache. Sharing
with other Microsoft developer tools remains the default.
([git-ecosystem/git-credential-manager#2415][pr-2415])
- **Support for Bitbucket Cloud's updated OAuth tokens.** Rotating
refresh tokens are now consistently saved against the resolved Bitbucket
username, avoiding repeated sign-ins caused by reusing an old refresh
token. Large access and refresh tokens are split across credential
entries when needed, so Windows users can keep the default `wincredman`
store without switching to another credential store.
([git-ecosystem/git-credential-manager#2433][pr-2433],
[git-ecosystem/git-credential-manager#2440][pr-2440])
- **Generic OAuth beyond HTTP(S).** Generic OAuth configuration now
works for non-HTTP credential requests, such as SMTP authentication for
`git send-email`. Windows Integrated Authentication remains
HTTP(S)-only. ([git-ecosystem/git-credential-manager#2445][pr-2445])
- **Refreshed terminal prompts and diagnostics.** Interactive prompts
use Spectre.Console, and Ctrl+C during a prompt restores the terminal
and exits cleanly with status 130. `git-credential-manager diagnose`
distinguishes passed, warning, failed, and skipped checks, reports the
actual credential store, and summarizes generated logs. Add `--strict`
to return a non-zero exit code for warnings as well as errors; without
it, only errors fail.
([git-ecosystem/git-credential-manager#2377][pr-2377],
[git-ecosystem/git-credential-manager#2423][pr-2423],
[git-ecosystem/git-credential-manager#2425][pr-2425])
- **More complete Trace2 diagnostics.** Expanded instrumentation covers
command execution, configuration, credential storage, UI startup, and
authentication. Entra tracing now records broker, cache, and
interaction-mode decisions alongside timings, using the existing Git
Trace2 settings. ([git-ecosystem/git-credential-manager#2408][pr-2408],
[git-ecosystem/git-credential-manager#2450][pr-2450])
- **Newer Git credential-protocol support.** GCM supports capability
negotiation and the `state[]` and `continue` fields introduced in Git
2.46, providing infrastructure for multi-stage authentication. Existing
authentication flows and compatibility with older Git versions are
preserved. ([git-ecosystem/git-credential-manager#2357][pr-2357])

#### Fixes

- Improve dispatcher failure and shutdown handling without starting the
UI framework for operations that do not need it.
([git-ecosystem/git-credential-manager#2451][pr-2451])
- Respect Git configuration `include` and `includeIf` files in scoped
queries, avoiding duplicate configuration entries when settings already
exist in an included file.
([git-ecosystem/git-credential-manager#2345][pr-2345])

#### Installation and contributor changes

- The install-from-source helper now supports both macOS and Linux at
`build/install-from-source.sh`. It defaults to a trimmed, self-contained
build; use `--aot` to opt into native compilation and its additional
toolchain requirements. See the [installation
instructions][install-from-source].
- Source builds now use `git-credential-manager.slnx`, with libraries
and tests directly under `src/` and packaging scripts under `build/`. A
solution build no longer runs packaging; use the per-platform
distribution projects for that. See the [development
guide][development].
([git-ecosystem/git-credential-manager#2367][pr-2367])
- Windows x64 and ARM64 packages use the 64-bit Inno Setup installer;
x86 packages retain a 32-bit installer.
([git-ecosystem/git-credential-manager#2380][pr-2380])
- Internal credential-helper actions (`get`, `store`, `erase`, and
`capability`) are hidden from `--help`, but remain available for Git to
invoke. ([git-ecosystem/git-credential-manager#2357][pr-2357])

**Changelog:** [v2.9.1...v3.0.0][full-changelog]

[point1-changelog]:
https://redirect.github.com/git-ecosystem/git-credential-manager/compare/v3.0.0...v3.0.1

[azrepos-tokens]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.1/docs/azrepos-users-and-tokens.md

[broker]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.1/docs/msauth-broker.md

[development]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.1/docs/development.md

[dotnet-support]:
https://redirect.github.com/dotnet/core/blob/main/release-notes/10.0/supported-os.md

[full-changelog]:
https://redirect.github.com/git-ecosystem/git-credential-manager/compare/v2.9.1...v3.0.0

[install-from-source]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.1/docs/install.md#install-from-source-helper-script

[legacy-client]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.1/docs/configuration.md#credentialazreposuselegacyclientid

[supported-environments]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.1/README.md#supported-environments

[pr-2345]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2345

[pr-2357]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2357

[pr-2365]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2365

[pr-2366]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2366

[pr-2367]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2367

[pr-2377]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2377

[pr-2379]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2379

[pr-2380]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2380

[pr-2408]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2408

[pr-2415]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2415

[pr-2416]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2416

[pr-2423]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2423

[pr-2425]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2425

[pr-2433]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2433

[pr-2440]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2440

[pr-2445]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2445

[pr-2449]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2449

[pr-2450]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2450

[pr-2451]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2451

###
[`v3.0.0`](https://redirect.github.com/git-ecosystem/git-credential-manager/releases/tag/v3.0.0):
GCM 3.0.0

[Compare
Source](https://redirect.github.com/git-ecosystem/git-credential-manager/compare/v2.9.1...v3.0.0)

Git Credential Manager 3.0 brings native ahead-of-time compilation,
Microsoft authentication broker support across Windows, macOS, and
Linux, and a refreshed terminal experience.

These notes cover changes since **GCM 2.9.1**.

> \[!IMPORTANT]
> This release changes supported operating systems and the default Azure
Repos authentication experience. Review the breaking changes before
upgrading.

#### Breaking changes and upgrade notes

##### Updated platform and .NET requirements

GCM now targets **.NET 10 on all platforms**. Windows builds no longer
use .NET Framework.

| Platform or installation method | Requirement |
| ------------------------------- |
--------------------------------------------------------- |
| Windows | Windows 10 or later; Windows Server 2016 or later |
| macOS | macOS 14 or later |
| Linux | A distribution supported by .NET 10 |
| .NET tool | Install the .NET 10 SDK before installing or updating GCM
|

See the [supported environments][supported-environments] and [.NET 10
support matrix][dotnet-support] for details. Standalone platform
packages do **not** require a separate .NET installation.

**Windows 7 and Windows 8.x are no longer supported by GCM 3.x.** GCM
2.9.x will receive minimal, security-only maintenance for those systems,
but no new features. Upgrading Windows is recommended.
([git-ecosystem/git-credential-manager#2365][pr-2365],
[git-ecosystem/git-credential-manager#2367][pr-2367])

##### Azure Repos uses OAuth tokens by default

GCM now returns Microsoft identity **OAuth tokens**, rather than
creating personal access tokens (PATs), by default for Azure Repos.
OAuth tokens are automatically refreshed as needed.

Explicit credential-type settings are still respected. If you need the
previous PAT behavior, set:

```shell
git config --global credential.azreposCredentialType pat
```

The equivalent environment variable is `GCM_AZREPOS_CREDENTIALTYPE=pat`.
See [Azure Repos users and tokens][azrepos-tokens].
([git-ecosystem/git-credential-manager#2449][pr-2449])

##### Microsoft authentication uses the OS broker by default

Broker integration is now enabled by default wherever supported, rather
than requiring an opt-in. This applies to Microsoft authentication, such
as Azure Repos; it does not change authentication for GitHub, Bitbucket,
or GitLab.

On macOS, broker authentication requires Company Portal and device
enrollment. On Linux, it requires the supported Intune setup, a GNOME
desktop, and Microsoft Edge; headless and WSL environments do not
support the Linux broker.

> \[!WARNING]
> Depending on your organization's policies, broker sign-in can prompt
you to join or enroll your device. On Windows, signing in with a
personal Microsoft account can also affect the account linked to your
local Windows user. Review the [broker documentation][broker] before
proceeding, especially on personal devices.

To opt out:

```shell
git config --global credential.msauthUseBroker false
```

The equivalent environment variable is `GCM_MSAUTH_USEBROKER=false`.
When the broker is in use, it takes precedence over
`credential.msauthFlow`.
([git-ecosystem/git-credential-manager#2449][pr-2449])

##### Azure Repos uses a dedicated GCM Entra application

GCM now signs in using its own first-party Microsoft Entra application
instead of the Visual Studio application. This enables broker support on
macOS and Linux, in addition to Windows.

If you encounter a client-application configuration error, GCM provides
guidance for retrying with the legacy application; it does **not**
silently switch back. For a one-command compatibility retry:

```shell
git -c credential.azreposUseLegacyClientId=true fetch
```

Please report the original failure if this workaround succeeds. The
legacy application does not support broker authentication on macOS or
Linux. Managed identity, service-principal, and workload-identity
federation flows are unaffected by the application change.

The undocumented developer overrides `credential.azreposDevClientId` and
`credential.azreposDevAuthorityBaseUri`, and their environment-variable
equivalents `GCM_DEV_AZREPOS_CLIENTID` and
`GCM_DEV_AZREPOS_AUTHORITYBASEURI`, have been removed. The
[legacy-client setting][legacy-client] is a focused compatibility
option, not an arbitrary client-ID or authority override.
([git-ecosystem/git-credential-manager#2416][pr-2416])

##### The embedded Microsoft sign-in web view has been removed

The Windows-only embedded web view depended on .NET Framework and is no
longer available. Use the broker, system browser, or device-code flow
instead. If you previously forced `credential.msauthFlow=embedded` or
`GCM_MSAUTH_FLOW=embedded`, change it to `auto`, `system`, or
`devicecode`. Disable broker integration as described above if you
specifically need to force a non-broker flow.
([git-ecosystem/git-credential-manager#2365][pr-2365])

##### Terminal and diagnostic output has changed

Terminal selection prompts now use arrow-key navigation instead of
numbered input, and `diagnose` has a new output format. Automation that
drives interactive menus or parses diagnostic text may need updating.
Git's credential-protocol input and output remain separate from
interactive prompts.
([git-ecosystem/git-credential-manager#2377][pr-2377],
[git-ecosystem/git-credential-manager#2425][pr-2425])

#### Features and improvements

- **Native ahead-of-time builds.** Published platform packages compile
GCM to native code to reduce startup overhead. The .NET tool remains a
framework-dependent distribution.
([git-ecosystem/git-credential-manager#2366][pr-2366],
[git-ecosystem/git-credential-manager#2367][pr-2367])
- **Cross-platform Microsoft single sign-on.** The authentication broker
can reuse OS accounts on supported Windows, macOS, and Linux
installations. When a default OS account can be used, GCM asks for
confirmation unless automatic use is explicitly enabled, or enabled by
default in environments such as Microsoft Dev Box. Set
`credential.msauthUseDefaultAccount=false` to skip the default-account
attempt. See the [broker documentation][broker].
([git-ecosystem/git-credential-manager#2379][pr-2379],
[git-ecosystem/git-credential-manager#2416][pr-2416])
- **Optional isolated Azure Repos token cache.** Set
`credential.azreposUseMicrosoftSharedCache=false`, or
`GCM_AZREPOS_USE_MSFT_CACHE=false`, to use a GCM-specific cache. Sharing
with other Microsoft developer tools remains the default.
([git-ecosystem/git-credential-manager#2415][pr-2415])
- **Support for Bitbucket Cloud's updated OAuth tokens.** Rotating
refresh tokens are now consistently saved against the resolved Bitbucket
username, avoiding repeated sign-ins caused by reusing an old refresh
token. Large access and refresh tokens are split across credential
entries when needed, so Windows users can keep the default `wincredman`
store without switching to another credential store.
([git-ecosystem/git-credential-manager#2433][pr-2433],
[git-ecosystem/git-credential-manager#2440][pr-2440])
- **Generic OAuth beyond HTTP(S).** Generic OAuth configuration now
works for non-HTTP credential requests, such as SMTP authentication for
`git send-email`. Windows Integrated Authentication remains
HTTP(S)-only. ([git-ecosystem/git-credential-manager#2445][pr-2445])
- **Refreshed terminal prompts and diagnostics.** Interactive prompts
use Spectre.Console, and Ctrl+C during a prompt restores the terminal
and exits cleanly with status 130. `git-credential-manager diagnose`
distinguishes passed, warning, failed, and skipped checks, reports the
actual credential store, and summarizes generated logs. Add `--strict`
to return a non-zero exit code for warnings as well as errors; without
it, only errors fail.
([git-ecosystem/git-credential-manager#2377][pr-2377],
[git-ecosystem/git-credential-manager#2423][pr-2423],
[git-ecosystem/git-credential-manager#2425][pr-2425])
- **More complete Trace2 diagnostics.** Expanded instrumentation covers
command execution, configuration, credential storage, UI startup, and
authentication. Entra tracing now records broker, cache, and
interaction-mode decisions alongside timings, using the existing Git
Trace2 settings. ([git-ecosystem/git-credential-manager#2408][pr-2408],
[git-ecosystem/git-credential-manager#2450][pr-2450])
- **Newer Git credential-protocol support.** GCM supports capability
negotiation and the `state[]` and `continue` fields introduced in Git
2.46, providing infrastructure for multi-stage authentication. Existing
authentication flows and compatibility with older Git versions are
preserved. ([git-ecosystem/git-credential-manager#2357][pr-2357])

#### Fixes

- Improve dispatcher failure and shutdown handling without starting the
UI framework for operations that do not need it.
([git-ecosystem/git-credential-manager#2451][pr-2451])
- Respect Git configuration `include` and `includeIf` files in scoped
queries, avoiding duplicate configuration entries when settings already
exist in an included file.
([git-ecosystem/git-credential-manager#2345][pr-2345])

#### Installation and contributor changes

- The install-from-source helper now supports both macOS and Linux at
`build/install-from-source.sh`. It defaults to a trimmed, self-contained
build; use `--aot` to opt into native compilation and its additional
toolchain requirements. See the [installation
instructions][install-from-source].
- Source builds now use `git-credential-manager.slnx`, with libraries
and tests directly under `src/` and packaging scripts under `build/`. A
solution build no longer runs packaging; use the per-platform
distribution projects for that. See the [development
guide][development].
([git-ecosystem/git-credential-manager#2367][pr-2367])
- Windows x64 and ARM64 packages use the 64-bit Inno Setup installer;
x86 packages retain a 32-bit installer.
([git-ecosystem/git-credential-manager#2380][pr-2380])
- Internal credential-helper actions (`get`, `store`, `erase`, and
`capability`) are hidden from `--help`, but remain available for Git to
invoke. ([git-ecosystem/git-credential-manager#2357][pr-2357])

**Full changelog:** [v2.9.1...v3.0.0][full-changelog]

[azrepos-tokens]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.0/docs/azrepos-users-and-tokens.md

[broker]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.0/docs/msauth-broker.md

[development]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.0/docs/development.md

[dotnet-support]:
https://redirect.github.com/dotnet/core/blob/main/release-notes/10.0/supported-os.md

[full-changelog]:
https://redirect.github.com/git-ecosystem/git-credential-manager/compare/v2.9.1...v3.0.0

[install-from-source]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.0/docs/install.md#install-from-source-helper-script

[legacy-client]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.0/docs/configuration.md#credentialazreposuselegacyclientid

[supported-environments]:
https://redirect.github.com/git-ecosystem/git-credential-manager/blob/v3.0.0/README.md#supported-environments

[pr-2345]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2345

[pr-2357]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2357

[pr-2365]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2365

[pr-2366]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2366

[pr-2367]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2367

[pr-2377]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2377

[pr-2379]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2379

[pr-2380]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2380

[pr-2408]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2408

[pr-2415]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2415

[pr-2416]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2416

[pr-2423]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2423

[pr-2425]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2425

[pr-2433]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2433

[pr-2440]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2440

[pr-2445]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2445

[pr-2449]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2449

[pr-2450]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2450

[pr-2451]:
https://redirect.github.com/git-ecosystem/git-credential-manager/pull/2451

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/tak848/dotfiles).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzQuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEzNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSIsInVwZGF0ZV9tYWpvciJdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: tak-automation[bot] <221638520+tak-automation[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants