Skip to content

Conversation

@kevinburkesegment
Copy link

Git ratchet functionality failed in worktree directories with "Cannot find git repository in any parent directory" because JGit's RepositoryCache.FileKey.isGitRepository() doesn't properly recognize worktree git directories.

Worktrees have a different structure where some files (objects, refs, etc.) are shared via a commondir file pointing to the main repository. This commit adds a custom isGitRepository() method that detects worktrees by checking for the commondir file and validates them appropriately.

Also adds comprehensive test coverage for worktree support.

Fixes #2728

Please DO NOT FORCE PUSH. Don't worry about messy history, it's easier to do code review if we can tell what happened after the review, and force pushing breaks that.

Please make sure that your PR allows edits from maintainers. Sometimes it's faster for us to just fix something than it is to describe how to fix it.

Allow edits from maintainers

After creating the PR, please add a commit that adds a bullet-point under the [Unreleased] section of CHANGES.md, plugin-gradle/CHANGES.md, and plugin-maven/CHANGES.md which includes:

  • a summary of the change
  • either
    • a link to the issue you are resolving (for small changes)
    • a link to the PR you just created (for big changes likely to have discussion)

If your change only affects a build plugin, and not the lib, then you only need to update the plugin-foo/CHANGES.md for that plugin.

If your change affects lib in an end-user-visible way (fixing a bug, updating a version) then you need to update CHANGES.md for both the lib and all build plugins. Users of a build plugin shouldn't have to refer to lib to see changes that affect them.

This makes it easier for the maintainers to quickly release your changes :)

kevinburkesegment and others added 2 commits December 3, 2025 15:31
Git ratchet functionality failed in worktree directories with
"Cannot find git repository in any parent directory" because
JGit's RepositoryCache.FileKey.isGitRepository() doesn't properly
recognize worktree git directories.

Worktrees have a different structure where some files (objects,
refs, etc.) are shared via a commondir file pointing to the main
repository. This commit adds a custom isGitRepository() method
that detects worktrees by checking for the commondir file and
validates them appropriately.

Also adds comprehensive test coverage for worktree support.

Fixes diffplug#2728

Co-Authored-By: Claude <noreply@anthropic.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

Development

Successfully merging this pull request may close these issues.

Git ratcheting causes exception to be thrown when using git worktrees

1 participant