diff --git a/packages/core/src/services/gitService.test.ts b/packages/core/src/services/gitService.test.ts index 2442bf569..7ef871274 100644 --- a/packages/core/src/services/gitService.test.ts +++ b/packages/core/src/services/gitService.test.ts @@ -170,6 +170,15 @@ describe('GitService', () => { expect(hoistedMockInit).toHaveBeenCalled(); }); + it('should initialize git repo when root repo check throws', async () => { + hoistedMockCheckIsRepo.mockRejectedValueOnce( + new Error('fatal: not a git repository'), + ); + const service = new GitService(projectRoot, storage); + await expect(service.setupShadowGitRepository()).resolves.toBeUndefined(); + expect(hoistedMockInit).toHaveBeenCalled(); + }); + it('should not initialize git repo if already initialized', async () => { hoistedMockCheckIsRepo.mockResolvedValue(true); const service = new GitService(projectRoot, storage); diff --git a/packages/core/src/services/gitService.ts b/packages/core/src/services/gitService.ts index 52700bdac..9a220d35a 100644 --- a/packages/core/src/services/gitService.ts +++ b/packages/core/src/services/gitService.ts @@ -58,7 +58,14 @@ export class GitService { await fs.writeFile(gitConfigPath, gitConfigContent); const repo = simpleGit(repoDir); - const isRepoDefined = await repo.checkIsRepo(CheckRepoActions.IS_REPO_ROOT); + let isRepoDefined = false; + try { + isRepoDefined = await repo.checkIsRepo(CheckRepoActions.IS_REPO_ROOT); + } catch { + // Some Git/simple-git combinations throw for non-repo directories + // instead of returning false. Treat that as "not initialized yet". + isRepoDefined = false; + } if (!isRepoDefined) { await repo.init(false, {