Skip to content

Conversation

@schuyler
Copy link

Description

GitPython's index.add() has a known bug that corrupts the git index when paths contain ./ prefixes or when . is included in the file list. The bug causes:

  • Files appearing with ./ prefix (e.g., ./index.md)
  • The .git directory itself being staged
  • Corrupted commits requiring git filter-repo to fix

Motivation and Context

The previous implementation only handled the exact case of ["."] but failed to handle [".", "other.md"] or ["./README.md"]. This fix uses repo.git.add() (CLI wrapper) for all cases, which is consistent with how other git operations are implemented in this file and correctly handles all edge cases.

Testing

I have been using the mcp-server-git MCP to allow Claude to edit a private otterwiki. Prior to making this change locally, I was seeing corruption of the Git repository every few commits. Since applying the change about a week ago, I have been using the wiki with Claude every single day and have not seen a single error of any kind.

Breaking Changes

None

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Protocol Documentation
  • My changes follows MCP security best practices
  • I have updated the server's README accordingly
  • I have tested this with an LLM client
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have documented all environment variables and configuration options

References

GitPython's index.add() has a known bug that corrupts the git index when
paths contain ./ prefixes or when . is included in the file list. The bug
causes:
- Files appearing with ./ prefix (e.g., ./index.md)
- The .git directory itself being staged
- Corrupted commits requiring git filter-repo to fix

The previous implementation only handled the exact case of ["."] but failed
to handle [".", "other.md"] or ["./README.md"]. This fix uses repo.git.add()
(CLI wrapper) for all cases, which is consistent with how other git
operations are implemented in this file and correctly handles all edge cases.

References:
- gitpython-developers/GitPython#375
- gitpython-developers/GitPython#292
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant