Skip to content

Fix GitConfigParser ignoring multiple [include] path entries#2100

Merged
Byron merged 1 commit intogitpython-developers:mainfrom
daniel7an:fix-issue-2099-multiple-includes
Feb 14, 2026
Merged

Fix GitConfigParser ignoring multiple [include] path entries#2100
Byron merged 1 commit intogitpython-developers:mainfrom
daniel7an:fix-issue-2099-multiple-includes

Conversation

@daniel7an
Copy link
Contributor

Problem

When an [include] section has multiple entries with the same key (e.g. multiple path values), only the last one was respected:

[include]
    path = ~/.config/git/maintenance.config
    path = ~/.config/git/my-config

Only my-config would be included. This is valid git config per git help config:

These variables can be given multiple times.

Root Cause

_included_paths() used self.items(section) which delegates to _OMD.items(). The _OMD.__getitem__ method returns only the last value for a given key, so duplicate keys (like multiple path entries) were lost.

Fix

Use _OMD.items_all() to retrieve all values for each key in include/includeIf sections, ensuring every path is processed.

Test

Added test_multiple_include_paths_with_same_key that creates a config with two path entries under a single [include] section and verifies both included files are loaded.

Fixes #2099

When an [include] section has multiple entries with the same key (e.g.
multiple 'path' values), only the last one was respected. This is because
_included_paths() used self.items(section) which delegates to _OMD.items(),
and _OMD.__getitem__ returns only the last value for a given key.

Fix by using _OMD.items_all() to retrieve all values for each key in the
include/includeIf sections, ensuring all paths are processed.

Fixes gitpython-developers#2099
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes a bug where GitConfigParser only respected the last path entry when multiple path values were specified under a single [include] or [includeIf] section. Git config allows multiple values for the same key (as documented in git help config), but GitPython was silently ignoring all but the last value due to using _OMD.items() which only returns the last value for each key.

Changes:

  • Modified _included_paths() to use a new _all_items() helper that calls _OMD.items_all() to retrieve all values for duplicate keys
  • Applied the fix to all four include scenarios: basic [include], and [includeIf] with gitdir, onbranch, and hasconfig conditions
  • Added comprehensive test coverage for multiple path entries under a single [include] section

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
git/config.py Added _all_items() helper function and updated all four call sites in _included_paths() to use it instead of self.items()
test/test_config.py Added test_multiple_include_paths_with_same_key to verify multiple path entries are all processed correctly

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@Byron
Copy link
Member

Byron commented Feb 14, 2026

Thanks a lot, it's much appreciated.

@Byron Byron merged commit 22e0b52 into gitpython-developers:main Feb 14, 2026
33 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

GitConfigParser ignores multiple [include] paths

2 participants