diff --git a/IntelliTect.Multitool.Tests/RepositoryPaths.Tests.cs b/IntelliTect.Multitool.Tests/RepositoryPaths.Tests.cs
index 902ce18..636408b 100644
--- a/IntelliTect.Multitool.Tests/RepositoryPaths.Tests.cs
+++ b/IntelliTect.Multitool.Tests/RepositoryPaths.Tests.cs
@@ -43,4 +43,25 @@ public void TrySearchForGitContainingDirectory_ReturnsFalseWhenNotFound()
Assert.False(RepositoryPaths.TrySearchForGitContainingDirectory(new DirectoryInfo(path), out string gitParentDirectory));
Assert.Empty(gitParentDirectory);
}
+
+ [Fact]
+ public void TrySearchForGitContainingDirectory_ReturnsTrueWhenGitIsAFile()
+ {
+ // In a git worktree, .git is a file (gitfile pointer), not a directory.
+ // This test simulates that scenario.
+ string tempRoot = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
+ string subDir = Path.Combine(tempRoot, "subdir");
+ try
+ {
+ Directory.CreateDirectory(subDir);
+ File.WriteAllText(Path.Combine(tempRoot, ".git"), "gitdir: ../.git/worktrees/my-branch");
+
+ Assert.True(RepositoryPaths.TrySearchForGitContainingDirectory(new DirectoryInfo(subDir), out string gitParentDirectory));
+ Assert.Equal(tempRoot, gitParentDirectory);
+ }
+ finally
+ {
+ Directory.Delete(tempRoot, recursive: true);
+ }
+ }
}
\ No newline at end of file
diff --git a/IntelliTect.Multitool/Build/IntelliTect.Multitool.targets b/IntelliTect.Multitool/Build/IntelliTect.Multitool.targets
index 9ef1ffb..705ec1a 100644
--- a/IntelliTect.Multitool/Build/IntelliTect.Multitool.targets
+++ b/IntelliTect.Multitool/Build/IntelliTect.Multitool.targets
@@ -21,6 +21,7 @@
-
+
+
diff --git a/IntelliTect.Multitool/RepositoryPaths.cs b/IntelliTect.Multitool/RepositoryPaths.cs
index 68627f2..bb57510 100644
--- a/IntelliTect.Multitool/RepositoryPaths.cs
+++ b/IntelliTect.Multitool/RepositoryPaths.cs
@@ -71,7 +71,8 @@ public static bool TrySearchForGitContainingDirectory(DirectoryInfo? searchStart
while (searchStartDirectory is not null)
{
DirectoryInfo[] subDirectories = searchStartDirectory.GetDirectories(".git");
- if (subDirectories.Length > 0)
+ // Also check for a .git file (present in git worktrees as a gitfile pointer)
+ if (subDirectories.Length > 0 || File.Exists(Path.Combine(searchStartDirectory.FullName, ".git")))
{
gitParentDirectory = searchStartDirectory.FullName;
return true;